Delegasyon ile iş mantığının kapsüllenmesi arasındaki çizgiyi nerede çizeriz? Bana öyle geliyor ki, delege arttıkça, o kadar anemik oluyoruz. Ancak, delegasyon yeniden kullanımı ve DRY sorumlusunu da teşvik eder. Öyleyse delege etmeye uygun olan ve alan modellerimizde neler kalmalı?
Aşağıdaki endişeleri örnek olarak alın:
Yetkilendirme . Etki alanı nesnesi erişim kontrolü kurallarını (CanEdit özelliği gibi) korumaktan mı sorumlu olmalı, yoksa yalnızca erişimi yönetmekle yükümlü olan başka bir bileşen / hizmete devredilmeli mi, örneğin IAuthorizationService.CanEdit (object)? Yoksa ikisinin birleşimi mi olmalı? Belki de etki alanı nesnesinin, asıl işi gerçekleştirmek için dahili bir IAuthorizationService'e yetki veren bir CanEdit özelliği vardır?
Doğrulama . Yukarıdakiyle aynı tartışma, doğrulama ile ilgilidir. Kuralları kim korur ve onları değerlendirmekten kim sorumludur? Bir yandan, nesnenin durumu o nesneye ait olmalıdır ve geçerlilik bir durumdur, ancak her etki alanı nesnesinin kurallarını değerlendirmek için kullanılan kodu yeniden yazmak istemiyoruz. Biz olabilir bu durumda miras kullanmayı ...
Nesne Yaratma . Fabrika sınıfı ve fabrika yöntemlerine karşı bir örneği 'yenileştirme'. Ayrı bir fabrika sınıfı kullanırsak, yaratma mantığını izole edebilir ve kapsüllenebiliriz, ancak nesnemizin durumunu fabrikaya açmak pahasına. Etki alanı katmanımız fabrika tarafından kullanılan bir iç kurucuyu açığa çıkararak ayrı bir derlemede ise bu yönetilebilir, ancak birden fazla yaratma modeli varsa bu bir sorun haline gelir. Ve eğer bütün fabrika yapıyorsa doğru kurucuyu çağırıyorsa, fabrikaya sahip olmanın amacı nedir?
Sınıftaki fabrika yöntemleri, nesnenin iç durumunu açmakla ilgili sorunu ortadan kaldırır, ancak statik olduklarından, ayrı bir fabrika sınıfında olduğu gibi bir fabrika arabiriminin enjeksiyonu yoluyla bağımlılıkları kıramazız.
Sebat . Etki alanı nesnemiz, yetkilendirme kontrolünü başka bir tarafa (IAuthorizationService) gerçekleştirme sorumluluğunu verirken CanEdit'i ifşa ederse, neden aynı şeyi yapan etki alanı nesnesinde bir Kaydet yöntemine sahip olmadığımızı iddia edebilir? Bu, işlemin enkapsülasyonu bozmadan gerçekleştirilip gerçekleştirilemeyeceğini belirlemek için nesnenin iç durumunu değerlendirmemizi sağlayacaktır. Tabii ki, depo örneğini bana biraz kokan etki alanı nesnesine enjekte etmemizi gerektiriyor, bunun yerine bir etki alanı olayı ortaya çıkarıyoruz ve bir işleyicinin kalıcılık işlemini gerçekleştirmesine izin veriyoruz?
Bununla nereye gittiğimi görüyor musun?
Rockford Lhotka, CSLA çerçevesi için Ücretli Sınıf rotasına gitme nedenleri hakkında harika bir tartışmaya sahip ve bu çerçeveyle ilgili bir miktar geçmişim var ve iş nesnesi fikrini, etki alanı nesnelerini paralel olarak birçok yönden görebiliyor. Ancak iyi DDD ideallerine daha bağlı olmaya çalışıyorum, işbirliğinin ne zaman çok fazla olduğunu merak ediyorum.
Topluluğum için IAuthorizationService, IValidator, IFactory ve IRepository ile sonuçlanırsam geriye ne kalır? Sınıfı anemik olmayan bir etki alanı nesnesi olarak kabul etmek için Nesnenin durumunu Taslaktan Yayınlanmış'a değiştiren bir Yayınlama yöntemine sahip olmak mı?
Senin düşüncelerin?