Domain Nedir ?
Bunu tanımlamak için önce bu bağlamda ve genel olarak gelişimde ne demek istediğimizi belirlemeliyiz . Bunun sözlük tanımı şudur: “Bir bilgi veya etkinlik alanı.” Bundan biraz aşağıya inecek olursak, yazılım mühendisliği alanında genellikle uygulamanın uygulanması amaçlanan konu alanını ifade eder. Başka bir deyişle, uygulama geliştirme sırasında , “uygulama mantığının etrafında döndüğü bilgi ve etkinlik alanı” dır. domain-driven-design
Yazılım geliştirme sırasında kullanılan bir diğer yaygın terimdir domain layer
veya domain logic
daha iyi birçok geliştiriciler için bilinen ne varsa, business logic
. business logic
Bir uygulama içi yüksek seviyeli kurallarına karşılık gelir business objects
: (OOAD
oluşturmak ve model verileri değiştirmek için etkileşim kurar birbiriyle).
Domain Driven Design Nedir?
Başlangıçta ve onun 2004 kitabının, içinde programcı Eric Evans tarafından popüler hale gelen Domain-Driven Desing : Yazılımın Kalbinde Mücadele ve Karmaşıklık , üzerine genişlemesi ve uygulama bu yazılım geliştirme için geçerli olan, kavram. Yazılımın ilgili parçalarını sürekli gelişen bir modele bağlayarak karmaşık uygulamaların yönetilmesini kolaylaştırmayı amaçlamaktadır. Üç temel ilkeye odaklanır:
- Çekirdeğe odaklanın
domain
vedomain logic
. - Karmaşık tasarımlar
domain
. domain experts
Uygulama modelini iyileştirmek ve ortaya çıkandomain
ile ilgili sorunları çözmek için sürekli olarak işbirliği yapın .
Evans’ın Domain’e Dayalı Tasarımı , DDD
uygulamaları açıklarken ve tartışırken faydalı olan birkaç genel terimi daha da tanımlar :
- Bağlam : Anlamını belirleyen bir kelimenin veya ifadenin göründüğü ayardır. Bir modelle ilgili ifadeler ancak bir bağlamda anlaşılabilir.
- Model : a’nın seçilen yönlerini tanımlayan
domain
ve bununla ilgili sorunları çözmek için kullanılabilen bir soyutlama sistemidomain
. - Ubiquitous Language :
domain model
Takımın tüm faaliyetlerini yazılımla birleştirmek için tüm ekip üyeleri tarafından kullanılan ve etrafında yapılandırılan bir dil . - Sınırlı Bağlam : İçinde belirli bir modelin tanımlandığı ve uygulanabilir olduğu bir sınırın (tipik olarak bir alt sistem veya belirli bir ekibin çalışması).
Yapı Taşları
Domain-driven-design
ayrıca oluşturmak ve değiştirmek için birbiriyle bağlantılı olarak kullanılabilen bir dizi üst düzey kavramı tanımlar domain models
:
- Entity :
object
Geleneksel olanın aksine, kendi tutarlı sürekliliğiobjects
ile tanımlananattributes
. - Value Object : Belirgin bir kimliğe sahip olan ancak farklı bir kimliği olmayan
immutable
(değiştirilemez) .object attributes
- Domain Event : Sistem içindeki model etkinliğiyle ilgili ayrı bir olayı kaydetmek için kullanılan bir nesne. İken tüm sistem içindeki olaylar izleniyor olabilir, bir tek olay türleri için oluşturulan ilgili bakım.
- Aggregate: Bir küme
entities
ve grubun etrafında belirlenen sınırlar ile. Her biri için tek tek veya tüm eylemleri kendi başına gerçekleştirmek yerine , öğeler topluluğuna tekil bir öğe atanır . Artık harici nesnelerin her bireye veya içindeki her bireye doğrudan erişimi yoktur , bunun yerine yalnızca tek bir öğeye erişimi vardır ve bunu, talimatları bir bütün olarak gruba iletmek için kullanır. Bu uygulamayı, serimizde ele aldığımız birçok gerçek kodlama uygulamasıyla ilişkilidir . - Service: Esasen, a
service
alanına doğal olarak uymayan bir işlem veya iş mantığı biçimidirobjects
. Başka bir deyişle, bazı işlevlerin olması gerekiyorsa, ancak birentity
veya ile ilişkilendirilemiyorsa , muhtemelen a'dır . - Repositories: Ortak ile karıştırılmamalıdır
version control repositories
,DDD
bir anlamırepository
, bir olanservice
küresel bir arayüz kullanan tüm erişim sağlamak olduğunuentities
ve belirli bir mesafede olduğu koleksiyon. Yöntemler, içindeki nesnelerin oluşturulmasına, değiştirilmesine ve silinmesine izin verecek şekilde tanımlanmalıdır . Bununla birlikte, veri sorguları yapmak için bunu kullanarak , bu tür veri sorgulama yeteneklerini iş mantığı içinden kaldırmaktır . - Factories :
design patterns
karmaşık nesneler oluşturmanın mantığını özetleyen ve müşterinin nesne manipülasyonunun iç işleyişi hakkında bilgi sahibi olmamasını sağlayan a'nınDDD
kullanılmasını önermektedir .
Domain-driven-design
ayrıca continuous integration
, tüm geliştirme ekibinden tek bir paylaşılan kod deposu kullanmasını ve günlük olarak (günde birkaç kez olmasa da) taahhütleri ona aktarmasını isteyen , her zamankinden daha popüler olan uygulamayı da yoğun bir şekilde vurgular . İşin sonunda, tüm kod tabanının bütünlüğünü kontrol eden, otomatik birim testleri, regresyon testleri ve benzerlerini çalıştıran, en son işlemlerde ortaya çıkabilecek olası sorunları hızla tespit eden otomatik bir süreç yürütülür.
Domain Driven Design Avantajları
- İletişimi Kolaylaştırır : Proje
ubiquitous
ile ilgili ortak ve dil oluşturmaya erken bir vurgu yapandomain model
ekipler için genellikle tüm geliştirme yaşam döngüsü boyunca iletişimi çok daha kolay bulacaktır. Genellikle,DDD
uygulamanın yönleri tartışılırken daha az teknik jargon gerektirecektir, çünküubiquitous language
erken belirlenenler muhtemelen bu daha teknik yönlere atıfta bulunmak için daha basit terimler tanımlayacaktır. - Esnekliği Artırır :
DDD
Kavramları çok yoğun bir şekilde temel aldığı için , içindekileri hemen hemen her şey bir nesneye dayanacak ve bu nedenle oldukça modüler ve kapsüllü olacaktır. Bu çeşitli bileşenlerin ve hatta bir bütün olarak tüm sistemin düzenli ve sürekli olarak değiştirilmesine ve iyileştirilmesine izin verir. - Domain İnterface :
DDD
Kavramlar etrafında inşa etme pratiği ve proje içindedomain experts
tavsiyeDDD
ettiğindendomain
, UI / UX'i vurgulayan uygulamaların aksine, genellikle eldeki için doğru ve temsili olan uygulamalar üretecektir. İlk ve en önemli. Açık bir denge gerekli olsa da, odaklanma,domain
birDDD
yaklaşımın bununla ilişkili izleyici kitlesinde iyi yankı uyandıran bir ürün üretebileceği anlamına gelir.
Domain Driven Design Dezavantajları
- Sağlam Domain Uzmanlığı Gerektirir : Geliştirme üzerinde çalışan teknik açıdan en yetkin beyinler olsa bile
domain expert
, takımda uygulamanın uygulanması amaçlanan konu alanının tam olarak içini ve dışını bilen en az bir kişi yoksa, hepsi boşuna. . Bazı durumlarda, geliştirme yaşam döngüsü boyunca hareket edebilecek bir veya daha fazla dış ekip üyesinin entegrasyonunu gerektirebilir . - Yinelemeli Uygulamaları Teşvik Eder : Birçoğu bunu bir avantaj olarak görse de,
DDD
uygulamaların gerektiğinde kendini ayarlayabilen şekillendirilebilir bir proje oluşturmak için sürekli yinelemeye ve sürekli entegrasyona güçlü bir şekilde dayandığı inkar edilemez . Bazı kuruluşlar, özellikle geçmiş deneyimleri büyük ölçüdewaterfall
model veya benzeri gibi daha az esnek geliştirme modellerine bağlıysa, bu uygulamalarla sorun yaşayabilir .
Umarım bu yazımda DDD’yi düzgün bir şekilde anlatabilmişimdir.
Yorum Yap