Recentemente, li muito sobre entidades de domínio Always Valid. Eu acredito que, para garantir que as entidades sejam sempre válidas, preciso:
1) Remova a obsessão primitiva e coloque regras de validação / domínio nos construtores de objetos de valor, conforme explicado aqui: https://enterprisecraftsmanship.com/2016/09/13/validation-and-ddd/ . 2) Coloque regras de validação / domínio no construtor de entidades ou nos configuradores de propriedades, conforme explicado aqui: http://gorodinski.com/blog/2012/05/19/validation-in-domain-driven-design-ddd/ .
No entanto, analiso alguns projetos de código aberto como este: https://github.com/gregoryyoung/mr . Pelo que entendi, o autor deste projeto é um defensor do modelo de domínio sempre válido e, no entanto, olho para a classe InventoryItem: https://github.com/gregoryyoung/mr/blob/master/SimpleCQRS/Domain.cs . Percebo que sou capaz de fazer isso:
InventoryItem inventoryItem = new InventoryItem();
ou isto:
InventoryItem inventoryItem2 = new InventoryItem(Guid.Empty,null);
Na minha opinião, isso significa que a entidade foi inicializada em um estado inválido. Esse parece ser o caso em todos os outros projetos de código aberto que eu observei recentemente, por exemplo, este: https://github.com/dcomartin/DDD-CQRS-ES-Example/blob/master/src/Domain /Customer.cs .
Sei que há validação contextual nesse projeto de código aberto ( https://martinfowler.com/bliki/ContextualValidation.html ). Também percebo que os ORMs precisam de um construtor vazio padrão se mapeados para o modelo de domínio.
Um objeto de domínio está em um estado válido se for inicializado com valores padrão usando um construtor de argumento zero / inicializado com valores vazios / nulos?