Ich habe in letzter Zeit viel über immer gültige Domänenentitäten gelesen. Ich bin zu der Überzeugung gelangt, dass ich Folgendes tun muss, um sicherzustellen, dass die Entitäten immer gültig sind:
1) Entfernen Sie die primitive Besessenheit und fügen Sie Validierungs- / Domänenregeln in die Wertobjektkonstruktoren ein, wie hier erläutert: https://enterprisecraftsmanship.com/2016/09/13/validation-and-ddd/ . 2) Fügen Sie Validierungs- / Domänenregeln in den Konstruktor von Entitäten oder die Eigenschaftssetzer ein, wie hier erläutert: http://gorodinski.com/blog/2012/05/19/validation-in-domain-driven-design-ddd/ .
Ich schaue mir dann jedoch einige Open Source-Projekte wie dieses an: https://github.com/gregoryyoung/mr . Soweit ich weiß, ist der Autor dieses Projekts ein Verfechter des immer gültigen Domänenmodells, und dennoch schaue ich hier in die InventoryItem-Klasse: https://github.com/gregoryyoung/mr/blob/master/SimpleCQRS/Domain.cs . Ich stelle fest, dass ich dazu in der Lage bin:
InventoryItem inventoryItem = new InventoryItem();
oder dieses:
InventoryItem inventoryItem2 = new InventoryItem(Guid.Empty,null);
In meinen Augen bedeutet dies, dass die Entität in einem ungültigen Zustand initialisiert wird. Dies scheint auch bei allen anderen Open Source-Projekten der Fall zu sein, die ich mir kürzlich angesehen habe, z. B. diesem: https://github.com/dcomartin/DDD-CQRS-ES-Example/blob/master/src/Domain /Customer.cs .
Mir ist klar, dass dieses Open Source-Projekt eine Kontextvalidierung enthält ( https://martinfowler.com/bliki/ContextualValidation.html ). Mir ist auch klar, dass ORMs einen leeren Standardkonstruktor benötigen, wenn sie dem Domänenmodell zugeordnet sind.
Befindet sich ein Domänenobjekt in einem gültigen Zustand, wenn es mit Standardwerten unter Verwendung eines Konstruktors für Nullargumente initialisiert / mit leeren / Nullwerten initialisiert wurde?