Etiketler
Abstract Factory, Builder, OOP Kavramları, Prensipler ve Desenler
Desenlerin Etkileşimi | Abstract Factory – Builder Deseni
Hayata dair ne varsa, hepsi tasarım prensipleri içine gizlenmiş. Gerçekte, tüm prensipler iyi bir hayat gözlemcisi tarafından modellenmiş, çizilmiş ve netleştirilmiş. Bu kavramlar, kodumuzun yaşam süresini ve kalitesini belirleyen standartlardan öte bir şey değil aslında. Bir de daha güzel ve çekici kıldığı da aşikâr 🙂
Tasarımın prensiplere sıkı sıkıya bağlı şekline de “desen” adı verilmiş. Denmiş ki, ben çizdim senin yerine, sen de al uygulama problemine:) Zaten işin en heybetli tarafı da bu. Acaba benim problemim ne? Çözümüme giden yolum nasıl bir desen?
Tasarım desenleri, tasarım prensiplerinin pratiğe dökülmüş halidir, diyerek biraz pratik yapalım. Önce olayın teorisini kavrayalım. Teorisini anlayalım da, sonra bir düşünelim acaba bu teoriyi bulan nasıl bulmuş olabilir? Ne ilham vermiş olabilir?
Açık-Kapalı Prensibi’nin en güzel pratiklerinden bir tanesi, Abstract Factory desenidir. Bu desen, nesnenin oluşumu gizlemesi açısından son derece önemlidir. İstemci, Factory üzerinden aldığı örnek üzerinden işlemini gerçekleştirirken, hiçbir zaman arka planda ne çalıştığı ve nasıl çalıştığını bilmez. Tüm bilgi alt sınıflar üzerindedir. Dolayısıyla genişleyebildiği kadar genişler modeliniz hem de istemci tarafından yapınız hiç değişmeden.
Her yerde sıkça rastlayacağınız birkaç anlatımı da, soyut fabrikalar ile (ki genelde birden çok), her bir fabrikaya ait farklı çeşit ürün ve ürün kombinasyonların oluşturulduğundan bahsedilir. Doğrudur.
Bunlar Abstract Factory deseninin tanımı ve sağladığı yararlar. Peki, ne işe yarar, niye ihtiyaç duyulur?
Abstract Factory ürün aileleri oluşturmaya yarar. Öyle ki bu ürünler, aileleriyle bir bütündür. En yaygın kullanımı veri erişim katmanında tercih edilir. Farklı veritabanları, farklı bağlantılar ya da aynı veri tabanı farlı veri erişimi sağlayıcıların (Data Access Provider) ürünleri bu desen kullanılarak oluşturulur. Bu ürünler aileleriyle anlamlıdır. Birbirlerine ihtiyaç duyarlar. Nasıl ki anneyi yavrusundan ayıramazsanız, Transaction ‘ıda Connection ‘dan ayıramazsınız 🙂
Peki koskoca bir aile oluşturduysak, yetermiyiz acaba kendi kendimize? Hiç kimseye ihtiyacımız yok mudur, olmamalı mıdır? Yeteriz yetmesine de, daha derli toplu olmak varken, dışarıya daha güçlü gözükmek varken…
Abstract Factory ile en iyi anlaşan desenlerin başında Builder deseni gelmektedir. İsimlerinden çağrışım yapacağı gibi, fabrikada oluşturulan ürünleri birisin inşa etmesi gerekmektedir ki, şık ve güzel bir ürün ortaya çıksın.
Bunca sözü aslında desenlerin etkileşimlerini anlatacağımız bir yazı dizisine giriş yapabilmek adına söyledik. Abstract Factory’le oluşturduğumuz Latin harfleri ailesiyle, Director’muz yönetiminde güzel bir yazı inşa etmek niyetimiz 🙂 Bu yazılı özelinde ise, Abstract Factory ve Builder Desenin etkileşiminden bahsedeceğiz…
Abstract Factory hangi ürünlerin oluşturulduğuyla ilgilenirken, Builder farklı fabrikalarca oluşturulmuş ürünlerden nasıl tek bir ürün elde edebileceğinizle ilgilenir. Bunun için Abstract Factory’de ana aktörler Fabrikalar ve Ürünler iken, Builder’da daha sanatsal olarak, Yönetmen, İnşacılar ve Bir Üründür. Zaten her sanat eseri (TEK) eşsiz olmak zorunda değil midir?
Yönetmen adımları maddeler, İnşacılar adımları takip eder. İstemci yönetmen ve ürünle muhatap olur sadece. Zaten her üründe de öyle değil midir? Yazılımcı kendisine gelen direktiflere göre kodlama gerçekleştirir. Ortaya ürünü çıkartır. Son kullanıcı sadece projeyi koordine edeni tanır ve ürünü kullanır 🙂 Kim kodlamış, nasıl kodlamış kimin umurundaki 😦
Özetle ve tekrarla, Abstract Factory ile oluşturduğunuz farklı ürünlerden, Builder ile tek bir ürün inşa edersiniz. Ya da tek bir ürünü farklı Buider’lar ile farklı şekilde inşa edebilirsiniz. Yada aynı ürünlerden, farklı yönetim şekliyle farklı sunumlar elde edebilirsiniz. Bir elin beş parmağının beşi de bir değil sonuçta… Bazen malzemeniz ürününüzün sunumunu değiştirir, bazen inşa edeniniz, bazen de işi yöneteniniz.
Malzeme demişken, bir örnekle yazımızı kapatalım. Abstract Factory ile bir ev inşası için gerekli ürün ailesini fabrikalar üzerinden oluşturursunuz. Builder ile de bir mimar yönetiminde inşaat ustalarınızla o ürünlerden evi inşa edersiniz. Lakin unutmayın, tek bir ev inşa edersiniz…
Umarım desenler arası etkileşimi, hayata dair örneklerle net olarak ortaya koyabilmişizdir. Devamı gelecektir.
Görüşmek üzere…
Eyvallah mehmet hocam.
Vallah” Son kullanıcı sadece projeyi koordine edeni tanır ve ürünü kullanır 🙂 Kim kodlamış, nasıl kodlamış kimin umurundaki :(“
dediğinize yüzde yüz katılıyorum…:(