Recientemente he leído mucho sobre las entidades de dominio Siempre válidas. He llegado a creer que para garantizar que las entidades sean siempre válidas, necesito:
1) Elimine la obsesión primitiva y coloque las reglas de validación / dominio en los constructores de objetos de valor como se explica aquí: https://enterprisecraftsmanship.com/2016/09/13/validation-and-ddd/ . 2) Coloque las reglas de validación / dominio en el constructor de entidades o los establecedores de propiedades como se explica aquí: http://gorodinski.com/blog/2012/05/19/validation-in-domain-driven-design-ddd/ .
Sin embargo, luego miro algunos proyectos de código abierto como este: https://github.com/gregoryyoung/mr . Por lo que entiendo, el autor de este proyecto es un defensor del modelo de dominio siempre válido y, sin embargo, miro aquí en la clase InventoryItem: https://github.com/gregoryyoung/mr/blob/master/SimpleCQRS/Domain.cs . Noto que puedo hacer esto:
InventoryItem inventoryItem = new InventoryItem();
o esto:
InventoryItem inventoryItem2 = new InventoryItem(Guid.Empty,null);
En mi opinión, esto significa que la entidad se inicializa en un estado no válido. Este parece ser el caso en todos los otros proyectos de código abierto que he visto recientemente, por ejemplo, este: https://github.com/dcomartin/DDD-CQRS-ES-Example/blob/master/src/Domain /Customer.cs .
Me doy cuenta de que hay una validación contextual en estos proyectos de código abierto ( https://martinfowler.com/bliki/ContextualValidation.html ). También me doy cuenta de que los ORM necesitan un constructor vacío predeterminado si se asignan al modelo de dominio.
¿Se encuentra un objeto de dominio en un estado válido si se inicializa con valores predeterminados utilizando un constructor de argumento cero / inicializado con valores vacíos / nulos?