ANTI-PATTERNS
Blob Anti-Pattern Nedir?
Blob, God Class, Monster Class isimleri anılan bu anti-pattern özelliği, kendisi üzerinde gereğinden fazla iş mantığını, bağlantıyı ve veri delegasyonunu tutması ve yönetmeyi çalışması sonucu oluşur.
Blob nasıl oluşur. Öncelikle en çok uğraştığım UI ve Desktop, Web uygulaması geliştirme kısmından örnek vererek konuyu anlatayım.
Uygulamalar genelde iterative olarak gelişir. İlk önce 2 bileşeni olan uygulama zaman içerisinde 4, 8, 16, 32 … olarak ilerlemeye başlar.
Not : Yazılım Geliştirme Modelleri yazısı içerisinde Iterative Geliştirme ile ilgili detaylara ulaşabilirsiniz.
Bizim ilk yazdığımız kodda CompA ve CompB birbiri ile direk konuşmasını istemeyiz çünkü ilerleyen süreçte bu sayı artacağı için bileşenlerin birbirleri ile konuşma arayüzlerini ve bağlantılarını kontrol edemez hale geliriz.
Bileşenlerin birbirleri ile olan iletişimi sırasında bu karmaşıklıktan kurtulmak için 2 örüntüden birisini tercih ederiz genelde.
Mediator Pattern , Observer Pattern göre daha kolay takip edilebilme ve kod okuması yapılsa bile Mediator Pattern tek bir sınıf üzerinde zaman içerisinde tüm bileşenlerin mantığını tutma ve yönetmeye dönüşürse yukarıda bahsettiğimiz Blob Pattern dönüşür. Aşağıdaki resimde uygulamamız 2 bileşenden 4 bileşene çıktığında, bu bileşenler arasındaki iş kurallarını ve akışlarını MainScreenManager belirliyor ise bu kodun ne kadar büyüdüğünü sizde göreceksiniz. Bileşen sayınız 50, 100 çıktığında artık kodunuz yönetilemeyecek hale gelir.
Peki bu yöntemi neden tercih ediyoruz. Çünkü geliştirmesi çok basit. Tek bir sınıf veya modül içerisinde tüm bağımlılıkları görmek ve birbirine bağlamak çok 2,3 satır kod ile yapabileceğiniz işler. Ama bu yapı 500, 1000+ üzerinde satıra ulaştığında artık kodun bir yumağa dönüştüğünü sizde farkedeceksiniz.
Bu durum da Blob Anti-Pattern gerçekleştirmiş olursunuz. Bu aşamadan sonra tamamen yapısal değişiklikler Observer , Pub/Sub, Event Based yapılara geçmek oldukça zordur.
Yapılacak en mantıklı davranış MainScreenManager sınıfı mantıklı parçalara bölerek, delegation yöntemi ile SubManager yönetmeye çalışmaktır.
Bu sayede Blob objenin içerisinde ufak Blob objeler çıkarak ana Blob sınıf/modülünün kod satır sayısı düşürülür.
Okumaya Devam Et 😃
Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.