Domain Driven Design (DDD), yazılım geliştirme sürecinde karmaşık iş domain’lerini anlamak ve bu domain’leri daha iyi modellemek için kullanılan bir yaklaşımı ifade eder.
DDD, iş dünyasının gereksinimlerini, kullanıcıların ihtiyaçlarını ve yazılımın tasarımını bir araya getirerek daha iyi bir anlayış ve etkili bir kod oluşturmayı amaçlar. İşte Domain Driven Design’ın temel kavramları ve ana prensipleri:
İşinizin odaklandığı konu veya iş kolu. DDD’de, bu domain’i anlamak ve modellemek temel amaçtır.
DDD, gerçek dünyadaki nesneleri ve ilişkileri yazılım nesnelerine dönüştürmeyi içerir. Bu, karmaşık iş domain’lerini daha iyi anlamak ve yönetmek için kullanılır. Veritabanındaki tablo’nun karşılığı gibi düşünülebilir.
DDD’de, bazı işlemler modele ait olmayabilir. Bu durumlarda servisler kullanılır. Örneğin, bir ödeme işlemi bir servis tarafından yönetilebilir.
Veritabanı ile etkileşimde bulunan bir bileşen. Repository, veritabanı işlemlerini yönetir ve sınıf nesnelerini saklar.
Bizim uygulamamızda ise; gelen http isteği sırasıyla;
- HTTP Handler Katmanı: gelen isteği alıp, validate edecek.
- Servis Katmanı: Yapacağı işe göre ilgili servisi, istekten aldığı verileri kullanarak çağıracak.
- Storage Katmanı: Servis, ilgili storage’ları kullanarak veritabanı ile konuşacak
sonra; yine sırasıyla geri dönüş başlayacak;
- Storage -> Servis
- Servis -> HTTP Handler
- HTTP Hander -> İsteği atan istemci (client)
Her zaman, HTTP handler input’u alacak, kontrollerini yapacak, gerektiği gibi gelmiş mi diye. Sonra görevi burada bitip, ilgili servisi çağıracak. Servis esas yapılacak işten sorumlu. Eğer veritabanı ile işi varsa Storage ile iletişim kuracak. Her şey yolunda giderse, Storage’dan aldıklarını HTTP handler’a iletecek. HTTP handler yine her şey yolunda giderse client’a cevap (response) dönecek ve akış tamamlanmış olacak.