Bağımlılık Tersine Çevirme İlkesi: “Üst düzey politika” ve “düşük düzey detay” diğer insanlara nasıl tanımlanır?


13

Bağımlılık tersine çevirme prensibini (çoğunlukla genç) meslektaşlarıma anlatmaya çalışıyorum. Hangisinin bir yazılımda "yüksek düzeyli politika" hangisinin "düşük düzeyli ayrıntı" olduğunu nasıl tanımlayabiliriz? Örneğin, yazılımımız birkaç iş uygulamasının iş akışını otomatik hale getirirse, neden iş akışı otomasyonunun üst düzey politika olduğunu ve iş uygulamalarının ayrıntılar olduğunu söylüyoruz?

Yanıtlar:


11

Not: Bu, önceki örneğimden tamamen yeniden yazılmıştır

Prizleri düşünün. Herhangi bir ulusta, üst düzey politika güç prizlerinin her zaman aynı olmasıdır. Size elektrik nereden aldığınız önemli değil (kömür, gaz, nükleer), duvardaki prizler aynı konektör seti aracılığıyla her zaman aynı miktarda güç vermelidir.

Artık bu sokete herhangi bir cihazı bağlayabilirsiniz, çünkü hepsinin ortak bir arayüzü olan "fiş" vardır. Üst düzey politika hiçbir zaman söz konusu uygulama detayının herhangi bir bölümünü dikte etmek zorunda değildir. Sadece bir şey takın ve gider.

Şimdi AC gücü istemeyen bir cihazınız varsa - belki 7V DC devrede çalışıyorsa - yine de bu üst düzey politikayı kullanabilirsiniz, sadece güç kaynağı ile cihaz arasında bir çeşit adaptöre ihtiyacınız var. Ve herkes aynı üst düzey politikaya sahip olduğundan, üretici bunu üst düzey politikada herhangi bir değişiklik yapmadan uygulamaya koyabilir. Uygulamayı ilkeye bağlayan kişinin (siz, dizüstü bilgisayarınızı takmanız) gerçekten de anlaması gerekmez.

Ayrıca, üretici aynı cihazı başka bir ülkede satmak istiyorsa, tek yapması gereken farklı bir adaptör geliştirmek. Dolayısıyla, aynı uygulama birden çok ilke ile çalışabilirken, aynı ilke birden çok uygulama çalıştırabilir.

Bu, bağımlılığın tersine çevrilmesine mükemmel bir örnektir.

Ama işin ilginç tarafı: İlk söylediğime geri dön. "Size nereden elektrik sağladığınız önemli değil." Bu aynı zamanda bir uygulama detayıdır. Üst düzey politika hala tüm prizlerin aynı şekle sahip olması ve aynı tipte güç yaymasıdır. Düşük seviyeli uygulama ayrıntıları, elektriğin nereden geldiği ve ne çalıştırıldığıdır.

Programlama terimleriyle, bu, yüksek düzeyli politikanın (bir dilin desteklediği yerlerde. DI'nin başka bir biçimi ördek yazmasıdır) arayüzü olduğu ve API'nın sağladığı ve uygulamanın tükettiği ve düşük düzeyli uygulama ayrıntılarının hem her ikisini de birbirini anlamak zorunda olmayan API ve kendisini tüketen bir uygulama.

Bağdaştırıcılar aynı uygulamayı farklı politikalara sığdırmak için kullanılabilir.


+1 Crikey. Basit bir prizden çok şey öğrenebileceğimi bilmiyordum :)
dreza

7

Yazılımın yeniden kullanılmasındaki klasik yaklaşım, başka hiçbir şeye bağımlı olmayan bileşenler oluşturmaktır (bu onları düşük seviyeli yapan şeydir) ve daha sonra düşük seviyeli bileşenlere bağlı olan daha üst düzey bileşenler oluşturmaktır. "yüksek seviye" ve "düşük seviye", özellikle bileşenin işlevine özgü olmayan, ancak genellikle sadece mimari bir karar olan bağımlılık yönüyle belirlenir.

Dolayısıyla, tek iş uygulamaları iş akışı otomasyonuna bağımlı olmadan oluşturulduğunda, ancak iş akışı denetleyicinizin iş uygulamasına doğrudan bağımlılıkları olduğunda, iş akışı otomasyonunun "yüksek düzey bir politika" olduğu ve iş uygulamasının "düşük düzey" bileşen. Bu yapının zorunlu olmadığını unutmayın - iş akışı otomasyon bileşeniniz, özel iş uygulamalarınıza da bağlı olmayan ancak farklı uygulamalara hizmet verecek şekilde yapılandırılabilen genel bir çerçeveyse, DIP'yi uygulamaya başlamışsınız demektir. Bu durumda, "yüksek seviye" / "düşük seviye" ayrımı artık bu iki şey arasında anlamlı olmayabilir.

Bu nedenle, "bağımlılık tersine çevirme" adı biraz yanıltıcıdır - çünkü bağımlılıklar "tersine çevrilmiş değil", ancak tamamen kaldırılmıştır (veya daha kesin olmak gerekirse: beeing derleme zaman bağımlılıklarından çalışma zamanı bağımlılıklarına dönüştürülmüştür).


1
Pek değil. Tersine çevirme gerçekleşir, çünkü daha düşük seviyeler arayüze bağımlıdır. Arabirim Ayırma İlkesini (SOLID'deki I) uygulamak, bu arabirim istemciye "aittir". Bu nedenle alt seviye mecazi olarak müşteriye bağımlıdır.
Michael Brown

2
@MikeBrown: olası bir bakış açısı. Arayüzün A veya B'ye değil, A ve B'nin altyapısına veya ortamına ait olduğu bakış açısını tercih ediyorum.
Doc Brown

1

DIP'yi açıklamak için basit bir görüntü kullanıyorum. Yazılım geliştirmenin klasik görünümü, her katman onu destekleyen alt katmanların üstünde yer alan bir yapım sürecidir. Bağımlılık tersine çevirme ilkesini kullanmak, daha çok bir mobil cihaz oluşturmak gibidir.Asma Mobil

Alt katmanlarda oturan daha yüksek katmanlardan ziyade, mobil arayüzde daha yüksek katmanlar, alt katmanları birbirine bağlayan dize ile birleştirir. Bir şekilde, alt katmanlar destek için bu arabirime bağlıdır (düşecekleri dize olmadan). Özetle DIP.


Güzel karşılaştırma için +1. Bu resimde, benim açımdan görebilirsiniz - tüm katmanlar arabirimlere bağlıdır, ancak daha yüksek katmanlarda alt katmanlara bağlı değildir veya tam tersi.
Doc Brown

Ne dediğini görüyorum, Arayüz ne daha yüksek ne de daha düşük seviyeye ait değil.
Michael Brown

1
DIP'nin nasıl açıklanacağını sormadı, başvurunun hangi bölümlerinin üst düzey politika ve hangilerinin düşük düzeyli uygulamalar olduğunu nasıl açıklayacağını sordu. Analojinizin bunu yapmak için fazla uzaması gerekmez. Sadece dizeyi değiştirmeden süslemeleri değiştirebilmeniz gerekir (çünkü üst düzey mobil politikanın dekorasyon uygulaması hakkında çok fazla ayrıntıya sahip olması nedeniyle).
pdr

1
(ve aslında, farklı malzemelerden tamamen yeni bir cep telefonu inşa edebilir ve aynı süslemeleri asabilirsiniz - bu Doc Brown'ın noktasıdır)
pdr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.