“Gerçek Dünyada” Gevşek / Sıkı Bağlantıyı Anlamak


9

Önyargısız bir açıklama istediğim için ne "topluluk" demeyeceğim, ancak yeniden kullanılabilir bir modül oluşturduğunuzu ve bu modülün 3+ bağımlı modül gerektirdiğini ve bunların 1'inin kaldırılması, yalnızca uygulamanızda bütün bu modülü kullanır, ama modülün kendisi.

Anladığım kadarıyla (yanlış olması gerekir) gevşek bir şekilde bağlanmış modüler sistem, sadece bir modülü çıkararak kırılmaz. Uygulama yine de çalışmalıdır, ancak bu "özellik" / modül olmadan ve modülün kendisi, bağımlı bir modül olmadığı için her şeyin çalışmamasına neden olmamalıdır.

Bu yanlış mı? Öyleyse, eğer modüller hala çalışmayan her şeyin noktasına bağlıysa, sıkı / gevşek kaplin arasındaki fark nedir?


2
Bu, lastikleri bir arabadan çıkarabileceğinizi ve yine de iyi çalışacağını
savunmak gibi

1
@Ryathal - Eh, aslında :) "Araba" iyi çalışır. Lastikleri olmayacak, ancak iyi çalışacak. Aslına bakarsanız, isterseniz tekerlekleri mahvedebilirsiniz, ama aslında onu da sürdürebilirsiniz. Bumpy Bumpy olabilir :)
Rook

Evet, aynen @ldigas'ın dediği gibi. Araba çalışır, radyo çalışır, her şey çalışır, ama hareket kısmı. Söylemeye çalıştığım şey bu.
Oscar Godson

Yanıtlar:


21

Tam olarak --- modülü çıkarmak sistemi iyi kırabilir. Gevşek bağlanmış sistemlerin ardındaki fikir, yeni modül eskisiyle aynı arayüz gereksinimlerine uyduğu sürece tamamen farklı bir modülde değiştirmenin gayet iyi çalışacağıdır. Eğer sıkıca bağlanmış olsaydı, çevreleyen kod iç kısımlar hakkında varsayımlar yapar ve yeni bir modül getirilirse başarısız olmaya başlar.


+1: Harika cevap! Modüller diğer modüllere bağlı olmalı, ancak dahili uygulamalarına bağlı olmamalıdır.
Giorgio

5

Gevşek bağlantı esasen modül arasında nasıl gelişebileceğine dolaylı bağımlılıktır.

Genel olarak, sıkı bir şekilde bağlı sistemler olduğunda, farklı modüllerin / nesnelerin, çevresel nesnelerin bu davranışını varsayan çok özel davranışları vardır. Bu tür nesneler diğer modül davranışlarına bağlanır / bağlanır ve tek başlarına veya başka bir bağlamda tekrar kullanılamazlar.

Bireysel işlevsellik sorumlu gelişmeye edemez halde Böyle modüller bağımsız ya da yapamaz evrim geçirmekte


Bir örnek:

Diyelim ki 3 nesneniz Shape(bir model nesnesi) ve Canvas(bir UI öğesi) var. şimdi

Bir yöntemin shape.draw(Canvas), tuvalin düzlemi tarafından sağlanan düzlem üzerinde bir nesne çizeceğini varsayın .

Şimdi, bazen pencereler kısmen kaplıdır ve yeniden boyutlandırılır. Bu gibi durumlarda, yukarıdaki yöntem böyle bir şey yapabilir.

shape::draw(Canvas) {
   Rect.WindowLeft = Canvas.GetWindowRect.getLeftOffset(); 
   Rect.LeftPixel = Canvas.GetWindowRect.pixels() + Rect.WindowLeft; 
   ....  // like this get all co-ordinates. 

   draw_instance(Rect);  // This will draw the actual shape. 
}

Temel olarak, burada çizim işlevi, şeylerin çizilmesi gereken dikdörtgeni alır. Bunu anlamak kolaydır (insanlar buna basit diyebilirler ). Bununla birlikte, bu son derece birleştirilmiş koddur.

Durumu hayal edin:

  • Tuvalin pencereleri tutma mekanizması artık bir dikdörtgen değilse ne olur?
  • Canvas'ın sakladığı özel olan ofsetler varsa ne olur ?
  • Başka bir uygulama aynı şekli istiyor ancak artık bir GUI penceresine sahip değilse (örneğin, görüntüler oluşturuyor ve dosyalara kaydediyorsa).

Sorunun kök nedeni nesne olduğunu shape bilir ve bu nedenle sıkı bir şekilde bağlanmış olan Canvas.

Yazdığı yere şekil vermek için bir piksel setinin verilmesi istenir; shapepiksel aslında yazılır nerede (hatta örtülü) bilgisine sahip olmamalıdır.


0

Modül olarak belirttiğiniz şeylere bile bağlıdır. Sistemin bazı bölümleri sıkıca eşleştirilmelidir (örneğin, varlıklarınız tüm uygulamada yeniden kullanılmalıdır), ancak bazı sistemler ya arayüz ayrımlarıyla ya da modülü kaldırırsanız uygulamayı bozmamaya çalışıyorsanız, gevşek olmalıdır , bu modül bir şekilde dinamik olarak, belki IoC kapsayıcısı vb.

Ayrıca, sıkı bağlantı, bir parçanın modülün tanımına değil, belirli modül uygulamasına bağlı olduğu anlamına gelir .

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.