Döngüsel bağımlılıklar, mimarlık günahı?
Yazılım mimarisinde döngüsel bağımlılıklara kıyasla hiçbir şey daha kötü değildir. Ama neden? Ve doğru mu?
Yazılım mimarileri bir sistemi modüllere böler ve modüller arasındaki ilişkileri tanımlar. Amaç, modülleri mümkün olduğunca geliştirebilmektir. Modüller arasındaki bazı bağımlılıklara izin verilir ve diğerleri değildir. Bağımlılıklar nedeniyle, modüller şu etkileyebilir: “Fatura” modülü “sipariş” modülünü kullanıyorsa, “sipariş” modülünde bir değişiklik “fatura” modülünde bir değişiklik zorlayabilir. Örneğin, arayüz değiştiğinde durum böyle. Bağımlılığa bağlı olarak, bağımsız gelişme her zaman mümkün değildir.
Modüllerin bağımsız olarak geliştirilmesi gerekiyorsa, bağımlılıklardan kaçınılmalıdır. Ancak tüm modüller bir sistem içermelidir. Bu yalnızca modüller sisteme neden olmak için diğer modülleri kullanıyorsa mümkündür. Bu nedenle bazı bağımlılıklar gereklidir.
Bir sistemin mimarisi genellikle sorunludur: değişiklikler zordur ve birçok modül üzerinden gerçekleştirilir. Bunun nedeni döngüsel bağımlılıklar olabilir. Döngüsel bağımlılık durumunda, sadece “fatura” modülü “siparişler” modülü değil, aynı zamanda “modül faturasını” kullanır. “Fatura” veya “sipariş” için bir değişiklik diğer formu etkileyebilir. Ancak gerçekte iki modül ayrılmalıdır. Bu nedenle, mimarlıktan dolayı, bu nedenle, mimarlıktan dolayı, bu nedenle, sadece mimarlıktan dolayı ayrılırlar.
Döngüsel bağımlılıkları olmayan bir sistem kesinlikle daha kolay değişebilir ve bu nedenle döngüsel bağımlılıkların ortadan kaldırılması mimaride bir iyileşme için önemli bir hedef olabilir.
Döngüsel bağımlılık – evet ve?
Ancak döngüsel bağımlılık gerçekten ne kadar ciddi? Gerçekte döngüsel bir bağımlılıktaki modüllerdeki değişikliklerin her zaman her iki modülün birlikte değişmesi gerektiğine yol açmayabilir. Sonuçta, şanslı olabilirsiniz ve değişiklik bir formla sınırlı kalır ve çalışan modüllerini etkilemez. Arayüz değişmeden kalırsa durum böyle olabilir. Döngüsel bir bağımlılık her zaman bir sorun haline gelmemelidir.
“Sipariş” ve “Fatura” nın döngüsel bir bağımlılığı yoksa, bağımlılıklar hala bir sorun olabilir: “Sipariş” den hemen hemen tüm değişiklikler arayüzde bir değişikliği ve dolayısıyla “faturayı” zorlarsa, döngüsel bağımlılık olmamasına rağmen ayrı bir gelişme pratik olarak mümkün değildir. Sonuçta, “Bill” hala “sipariş” değiştirmeden değiştirilebilir çünkü bu yönde bağımlılık yoktur. Ancak, bir formdaki bir değişikliğin neredeyse her zaman farklı bir formda bir değişikliğe neden olması, gerçeklikteki değişiklikler her zaman bir formla sınırlı ise döngüsel bağımlılıktan daha kötü olabilir.
Döngüsel bağımlılıkları ortadan kaldırın, bu nedenle sorunun sadece bir kısmını çözer ve gerekirse en önemli kısım bile değil.
Döngü yok – gerçekçi bir hedef?
Gerçekten döngüleri tamamen silebilir misiniz? Bahar çerçevesi gibi örnek sistemler de sınıflar arasında bulunmaktadır. Sadece Java paketleri arasında aslında döngüsel özgürlüğe ulaşır. Mimari yönetim araçları bu paket döngülerine izin verir ve ortadan kaldırır. Bazen çok basit: bir dersi veya bazı sınıfları başka bir pakete taşıyın. Keşke bu sınıfların yanlış yönde bir bağımlılığı varsa, döngüsel bağımlılık kaybolabilir. Veya bir arayüz tanıtılır. Ancak sınıfların veya bir arayüzün ertelenmesi gerçekten bir sistemde bağımsız gelişmeye izin vermeli mi?
Bu yaklaşımlar tamamen tekniktir ve alan adı hakkında bilgi gerektirmez. Bazı araçlar otomatik olarak “mükemmel” bir yapıyı bile belirleyebilir. Ancak yazılım mimarisi sanatı, alan adının mantığını yapılandırmaktır. Böyle tamamen teknik bir yaklaşım aslında doğru yol olamaz.
Burada da burada diğer metriklerde olduğu gibi de geçerlidir: döngüsel bağımlılıklar bir sorunun göstergesi olabilir – ya da olmasın. Onları sadece metrik fetolmayı tatmin etmek için ortadan kaldırmak mantıklı değildir. Sadece sistemin değişimi döngüsel bağımlılıklar nedeniyle negatifse ile yüzleşmelisiniz. Ve sonra doğru yol, alanın mantığını daha iyi yapılandırmak ve sadece metrikleri optimize etmekle kalmaz.
Sonunda, kimse bağımlılıkları yönettiğinde düşünceyi azaltmaz ve doğru önlemleri tek başına almanız gerekir.
TL; Dr.
Döngüsel bağımlılıkların yazılım değiştirilebilirliği üzerinde olumsuz bir etkisi olabilir, ancak yanlışlıkla ölümcül bir günah olma itibarıdır.
()