Domain Driven Design Notlarım — Continuous Learning, Knowledge-Rich Design ve Deep Model

Mert Türkman
3 min readMar 13, 2023

--

Selam arkadaşlar, bu yazımda domain driven design için önemli konular olan continuous learning, knowledge-rich design ve deep modele dair bildiklerim ve almış olduğum notların düzenlenmiş hali üzerinden konura değineceğim, faydalı olmasını dilerim hadi başlayalım. :)

Continuous Learning Neden Önemli ?

Her zaman olabiliceği gibi domain bilgisine sahip ekip üyeleri ayrılabilir veya yeniden yapılanma gerçekleşip ekip dağılabilir ve bilgi parçalanır. Burda önemli olan nokta devir sürecinde dökümante edilmemiş bilgiler sağlıklı bir şekilde aktarılmamış ise bilgiler kaybolabilir. Bu yüzden her ekip üyesinin domaini hakkında yeterli seviyede bilgi sahibi olması gerekmektedir.

Yüksek üretkenliğe sahip ekipler, sürekli öğrenmeyi uygulayarak bilgilerini geliştirirler. Developerlar için bu, teknik bilginin yanı sıra genel domain modelleme becerilerinin geliştirilmesi ve paylaşılması anlamına gelir. Aynı zamanda uygulamanın domaini ile ilgili bilgi birikimi artar ve tazelenir.

Özetlicek olursak sürekli öğrenmeyi uygulayan ekipler aşağıdaki konular hakkında önemli bilgiler edinirler;

  • Teknik bilgi
  • Domain modelleme bilgisi
  • Domaine özel bilgi birikimi

Zamanla, kendileri domain expert haline gelen developerlar, en etkili knowledge cruncher olurlar ve bu nedenle en verimli aynı zamanda önemli ekip üyeleri olurlar.

Knowledge-Rich Design’a Niye İhtiyacımız Var?

İş süreçleri ve kuralları ilgili kavramlar kadar domain merkezindedir. İş kuralları arasında gerçek bir tutarsızlık olduğunda domain expertler ve developerlar ile beraber yapılan knowledge crunching işlemide yoğunlaşır. Domain expertler genellikle tüm bu iş kuralları arasındaki çelişkileri çözerken ve boşlukları uygun bir şekilde doldururken sürecin ne kadar karmaşık olduğunun farkında değildir. Kuralların netleştirilmesi, detaylandırılması, uzlaştırılması ve kapsam dışı bırakılması developerlar ile yakın işbirliği içinde knowledge crunching yolu ile gerçekleştirilir.

Peki, damıtılmış bir iş kuralını projede daha açık ve herkezin erişebileceği hale nasıl getirebiliriz ? Sonuçta bir developerın rehberliğinde bile olsa herhangi bir domain expertin kuralı doğrulamak için bu kodu okuması pek muhtemel değil aynı zamanda bu domaine aşina olmayan teknik bir kişi gereksinim metni ile kod arasında bağlantı kurması zor olucaktır.

Bu bilgiyi daha iyi yakalamak için tasarımı değiştirebiliriz. Bir iş süreci için birden fazla farklı iş kuralının uygulanabileceği durumlar mevcuttur. Örneğin uygulanmasını istediğimiz bir veya birden çok iş kuralı için strateji pattern kullanabiliriz. Böylece iş kuralları domain modelde daha belirgin bir şekilde ifade edilebilir.

Daha iyi anlaşılması için yukardaki örneği inceleyelim. Burda havalimanına erişmek için taxi, araba ve otobüs gibi üç yolumuz mevcuttur. Her birisinin maliyeti farklı olması nedeniyle maliyet hesaplamak için farklı iş kurallarına sahiptir. Bu pattern ile iş kurallarını modelimize daha anlaşılır şekilde yansıtabiliyoruz ve buda bize anlaşılır, bilgi zengini modellerin ortaya çıkmasını sağlıyor.

Deep Model Nedir ?

Modeller ilk hazırlandığında faydalı model unsurları nadiren yer alır. Domain ve uygulamanın ihtiyaçlarını anlamaya başladıkça önemli görünen ama bir önemi olmadığını anladığımız yüzeysel model unsurları bir kenara atılır. Başlangıçta aklımıza gelmeyen ancak meselenin özüne inildikçe soyutlamalar ortaya çıkar ve modellerimiz üzerinde güncellemeler yapılır. Belli bir sürelik bilgi birikiminden ve güncellemelerden sonra yüzeysellikten kurtulmasıyla birlikte süreci basit, anlaşılır şekilde yansıtan modellere dönüşürler. Bu tür modeller deep model olarak tanımlanır.

--

--