bu yüzden başka bir ORM'ye geçmek imkansız olurdu (istediğimiz değil).
Bu yanlış görünüyor. Havuz deseninin en büyük avantajı, veri erişim mantığını gizlemeniz ve kolayca değiştirilebilmesidir.
Şimdiye kadar iş mantığımı etki alanı modelime koyduğum ve depolarla ORM ile çalışacağım (ki seçtiğim). Ancak, uygulamanın ORM kısmı için MDA aracını kullanmaya devam etmek istersem, burada oluşturulan model çok anemik olacaktır (yani herhangi bir iş mantığı içermez). Benzer şekilde ORM için Entity framework (.net) veya NHibernate kullandıysam da anemik bir model olurdu. Sadece NHibernate kullandıysam iş mantığını nereye koyacağınızdan emin değilim.
Anemik etki alanı modeli, birçok kişi tarafından, örneğin Martin Fowler tarafından kötü bir uygulama olarak kabul edilir. Böyle bir tasarımdan kaçınmalısınız çünkü böyle bir model iyi bir nesne yönelimli tasarımdan ziyade prosedürel tasarım tekniklerine yol açar. Daha sonra veri sınıfları ve yönetici / işleme sınıflarınız olur, bu da durumu ve davranışı ayırdığınız anlamına gelir. Fakat bir nesne gerçekten "durum ve davranış" olmalıdır.
NHibernate kalıcılık cehaletinde iyi bir iş çıkarıyor. XML veya FluentNHibernate ile eşleme ayrıntılarını gizleyebilir ve sadece düz POCO'lar yazabilirsiniz. NHibernate ile zengin bir etki alanı modeli oluşturmak çok kolaydır. Bunu varlık çerçevesi ve MDA aracıyla da yapabileceğinizi düşünüyorum. Bu araç kısmi sınıflar ürettiği sürece, yeni nesil kullanıcı tarafından yazılan kodunuzu yok edebileceğinden endişe etmeden oluşturulan kodu oldukça kolay bir şekilde genişletebilirsiniz.
Bu uzun hikayeyi kısaltmak için. Eğer NHibernate, hiçbir şey kullandığınızda, tekrar ediyorum hiçbir şey , zengin alanı modeli kucaklayan alıkoyar. FluentNHibernate ile kullanmanızı ve elle eşlemenizi tavsiye ederim. Eşleme kodunun yazılması yalnızca 5 ila 10 dakika sürer. Aynı şeyin varlık çerçevesi için de geçerli olduğunu ve araçlarının en azından kolayca genişletilebilen kısmi sınıflar oluşturduğunu düşünüyorum.
Bu şekilde düşünerek doğru muyum, diğer bir deyişle DDD ile etki alanındaki tüm iş mantığı ve depolar aracılığıyla kalıcılık için ORM'yi kullanıyorum?
Çoğunlukla haklısın. Zengin bir alan adı modeline sahip olmalısınız. Özellikle işler gittikçe daha karmaşık hale geldiğinde, düzgün bir şekilde tasarladığınızda bakımı ve genişletilmesi daha kolaydır. Ancak DDD'nin ayrıca iş mantığını uygulamak için (Domain Layer ve Application Layer) Hizmetlerini ve yaratıcı mantığı kapsüllemek için Fabrikaları da bildiğini unutmayın.
Ayrıca iş mantığını alan mantığı ve gerçek uygulama iş mantığına ayırma eğilimindeyim. Etki alanı mantığı, tamamen farklı bir katman olan uygulama mantığı, etki alanının belirli kullanım durumu / uygulama için nasıl kullanıldığını kapsarken, etki alanının nasıl etkileştiği ve davrandığıdır. Çoğu zaman, belirli kullanım örneklerini desteklemek ve daha güçlü hale getirmek için etki alanı modelini güncellemem gerekir.