Sürekli karşılaştığım sorun, veri deposuna karşı hala verimli bir şekilde çalışırken alan mantığı tarafından yönlendirilen hesaplanmış değerlerle nasıl başa çıkılacağıdır.
Misal:
Bir hizmet aracılığıyla havuzumdan bir Ürün listesi döndürüyorum. Bu liste, istemci tarafından gönderilen DTO isteğindeki sayfalandırma bilgileriyle sınırlıdır. Ek olarak, DTO bir sıralama parametresi (istemci dostu bir numaralandırma) belirtir.
Basit bir senaryoda, her şey harika çalışır: hizmet repo'ya disk belleği ve sıralama ifadeleri gönderir ve repo DB'ye verimli bir sorgu gönderir.
Ancak, etki alanı modelimden bellekte oluşturulan değerleri sıralamamız gerektiğinde tüm bunlar bozulur. Örneğin, Product sınıfı, iş mantığına dayalı bir bool döndüren bir IsExpired () yöntemine sahiptir. Şimdi repo seviyesinde sıralayamıyorum ve sayfa yapamıyorum - hepsi bellekte (verimsiz) yapılacaktı ve hizmetim bu paraşütleri ne zaman repo'ya vermenin ve ne zaman sıralama / sayfalama yapmanın karmaşıklıklarını bilmek zorunda kalacaktı kendisi.
Bana mantıklı gelen tek örüntü db'de varlığın durumunu saklamak (IsExpired () 'i salt okunur bir alan haline getirmek ve kaydetmeden önce etki alanı mantığı üzerinden güncellemek). Bu mantığı ayrı bir "okuma modeli / dto" ve "raporlama" deposuna ayırırsam, modelimi istediğimden daha anemik hale getiriyorum.
BTW, bunun gibi hesaplamalar için orada gördüğüm her örnek, bellek içi işlemeye ve uzun vadede çok daha az verimli olduğu gerçeğine odaklanıyor. Belki zamanından önce optimizasyon yapıyorum, ama bu sadece bana uygun değil.
DDD içeren neredeyse projede yaygın olduğundan emin olduğum için başkalarının bununla nasıl başa çıktığını duymak isterim.