Kısacası, "new" ifadesini her kullandığınızda, bu kodu içeren sınıfı yaratılan nesneye sıkıca bağlarsınız; bu nesnelerden birini somutlaştırmak için, somutlaştırmayı yapan sınıf somutlaştırılmış somut sınıfı bilmelidir. Dolayısıyla, "yeni" kullanırken, somutlaştırmayı yerleştirdiğiniz sınıfın bu bilginin ikamet etmesi için "iyi" bir yer olup olmadığını düşünmelisiniz ve eğer bu formda somutlaştırılan nesne değişecekti.
Başka bir somut sınıf bilgisi olan bir nesne olan sıkı bağlantıdan her zaman kaçınılmaz; bir düzeyde, SOMEWHERE, bir şey, başka bir şeyden başka bir yerden bir kopyası verilerek nesne ile ilgilense bile, bu nesnenin nasıl oluşturulacağını bilmek zorundadır. Ancak, yaratılan sınıf değiştiğinde, söz konusu sınıfın somut uygulamasını bilen herhangi bir sınıf, söz konusu sınıfın değişiklikleriyle doğru bir şekilde ilgilenmek üzere güncellenmelidir.
Her zaman sormanız gereken soru şudur: "Bu sınıfa bu sınıfın nasıl oluşturulacağını bilmek uygulamayı korurken bir yükümlülük haline gelecek mi?" Her iki önemli tasarım metodolojisi (SOLID ve GRASP) genellikle farklı nedenlerle "evet" yanıtı verir. Bununla birlikte, bunlar sadece metodolojilerdir ve her ikisinin de benzersiz programınızın bilgisine dayanarak formüle edilmedikleri aşırı sınırlamaları vardır. Bu nedenle, sadece dikkatle yanabilirler ve herhangi bir sıkı bağlantı noktasının, açıkça bu noktanın her iki tarafında veya her iki tarafında değişiklik yapma ile ilgili bir soruna neden olacağını varsayabilirler. Üç şeyi bilerek nihai bir karar vermelisiniz; teorik en iyi uygulama (her şeyi gevşek bir şekilde birleştirmek çünkü her şey değişebilir); teorik en iyi uygulamayı uygulama maliyeti (bir tür değişikliği diğerini engellerken bir tür değişikliği kolaylaştıracak birkaç yeni soyutlama katmanı içerebilir); ve tahmin ettiğiniz değişiklik türünün gerçek dünya olasılığı hiç gerekmeyecek.
Bazı genel yönergeler:
Derlenmiş kod kitaplıkları arasında sıkı bağlantıdan kaçının. DLL'ler (veya bir EXE ve DLL'leri) arasındaki arabirim, sıkı bağlantının bir dezavantaj sunacağı ana yerdir. DLL X'te A sınıfında bir değişiklik yaparsanız ve ana EXE'deki B sınıfı A sınıfını bilirse, her iki ikili dosyayı yeniden derlemeniz ve serbest bırakmanız gerekir. Tek bir ikili sistem içinde, daha sıkı bağlantıya genel olarak daha izin verilir, çünkü tüm ikili dosyalar yine de herhangi bir değişiklik için yeniden oluşturulmalıdır. Bazen, birden fazla ikili dosyayı yeniden oluşturmak kaçınılmazdır, ancak kodunuzu, özellikle bant genişliğinin yüksek olduğu durumlarda (mobil uygulamaları dağıtmak gibi; yeni bir DLL'i yükseltme sırasında itmek çok daha ucuzdur) mümkün olan yerlerde kaçınabileceğiniz şekilde yapılandırmalısınız. programın tamamını zorlamaktan çok).
Programınızın ana "mantık merkezleri" arasında sıkı bağlantıdan kaçının. İyi yapılandırılmış bir programı yatay ve dikey dilimlerden oluşan olarak düşünebilirsiniz. Yatay dilimler, UI, Controller, Domain, DAO, Data gibi geleneksel uygulama katmanları olabilir; dikey dilimler tek tek pencereler veya görünümler için veya tek tek "kullanıcı hikayeleri" için tanımlanabilir (bazı temel türlerde yeni bir kayıt oluşturmak gibi). İyi yapılandırılmış bir sistemde yukarı, aşağı, sola veya sağa hareket eden bir arama yaparken, genellikle bu aramayı soyutlamanız gerekir. Örneğin, validasyonun veri alması gerektiğinde, doğrudan DB'ye erişimi olmamalı, ancak bunu nasıl yapacağını bilen gerçek nesne tarafından desteklenen veri alımı için bir arayüze çağrı yapmalıdır. Bazı kullanıcı arayüzü kontrolünün başka bir pencereyi içeren gelişmiş mantık gerçekleştirmesi gerektiğinde, bir olay ve / veya geri arama yoluyla bu mantığın tetiklenmesini özetlemelidir; sonuç olarak ne yapılacağını bilmek zorunda kalmaz ve onu tetikleyen kontrolü değiştirmeden ne yapılacağını değiştirmenize izin vermez.
Her durumda, bir değişikliğin ne kadar kolay veya zor olacağını ve söz konusu değişikliğin ne kadar muhtemel olacağını düşünün. Oluşturduğunuz bir nesne yalnızca tek bir yerden kullanılıyorsa ve değiştirmeyi öngörmüyorsanız, o zaman sıkı bağlantıya genellikle daha izin verilir ve hatta bu durumda gevşek bağlantıya göre daha üstün olabilir. Gevşek bağlantı, bir bağımlılığın uygulanmasının değişmesi gerektiğinde bağımlı nesnelerde değişiklik yapılmasını önleyen ekstra bir katman olan soyutlama gerektirir. Ancak, arabirimin kendisinin değişmesi gerekiyorsa (yeni bir yöntem çağrısı ekleme veya varolan bir yöntem çağrısına parametre ekleme), bir arabirim aslında değişikliği yapmak için gereken iş miktarını artırır. Tasarımı etkileyen farklı tür değişiklik olasılığını tartmanız gerekir,