Domain Driven Design'a dalıyorum ve karşılaştığım bazı kavramlar yüzey üzerinde çok anlamlı, ama onları daha fazla düşündüğümde bunun gerçekten iyi bir fikir olup olmadığını merak etmem gerekiyor.
Örneğin, agrega kavramı mantıklı. Etki alanı modelinin tamamı ile uğraşmanıza gerek kalmaması için küçük sahiplik alanları yaratırsınız.
Ancak, bunu bir web uygulaması bağlamında düşündüğümde, küçük veri alt kümelerini geri almak için sık sık veritabanına vuruyoruz. Örneğin, bir sayfa yalnızca sipariş sayısını listeleyebilir, siparişi açmak ve sipariş kimliğini görmek için linkler tıklayabilirsiniz.
Ben sağ anlayış Agregalar olsam, genellikle üyelerini içerecektir bir OrderAggregate dönmek için depo desen kullanmak istiyorsunuz GetAll
, GetByID
, Delete
, ve Save
. Tamam, kulağa hoş geliyor. Fakat...
Tüm siparişlerimi listelemek için GetAll'ı çağırırsam, bana bu kalıbın tüm toplu bilgiler listesinin iade edilmesini, siparişlerin, sipariş satırlarının vb. (sadece başlık bilgisi).
Bir şey mi eksik? Yoksa burada kullanacağınız bir miktar optimizasyon var mı? İhtiyacınız olmadığında, tüm bilgilerin bir araya getirilmesini savunan birisinin hayal edemeyeceğimi hayal edemiyorum.
Kuşkusuz, biri deponuzda olduğu gibi yöntemler yaratabilir GetOrderHeaders
, ancak bu ilk olarak depo gibi bir kalıp kullanma amacını ortadan kaldırıyor gibi görünmektedir.
Birisi bunu benim için açıklayabilir mi?
DÜZENLE:
Çok daha fazla araştırmadan sonra, bu bağlantının kesilmesinin saf bir Depo modelinin çoğu insanın bir Depo olduğunu düşündüğünden farklı olduğunu düşünüyorum.
Fowler, veri deposunu toplama anlambilimi kullanan ve genellikle bellekte tutulan bir veri deposu olarak tanımlar. Bu, tüm bir nesne grafiğini oluşturmak anlamına gelir.
Evans, Depoyu Toplam Kökler içerecek şekilde değiştirir ve bu nedenle depo yalnızca Toplamadaki nesneleri desteklemek için depolanır.
Çoğu kişi, depoları yalnızca istediğiniz veriyi elde etmek için yöntemler oluşturduğunuz, yüceltilmiş Veri Erişim Nesneleri olarak düşünmektedir. Bu, Fowler'in Kurumsal Uygulama Mimarisi Modellerinde açıklandığı gibi niyet olarak görünmüyor.
Yine de diğerleri depoyu, öncelikle test etmeyi ve alay etmeyi kolaylaştırmak ya da ısrarı sistemin geri kalanından ayırmak için kullanılan basit bir soyutlama olarak düşünürler.
Sanırım cevap, bunun ilk düşündüğümden çok daha karmaşık bir kavram olduğu.