Eu leio sobre Design Orientado a Domínio por quase dois anos e venho introduzindo cautelosamente alguns conceitos em meu trabalho diário ou, pelo menos, fazendo planos de como as coisas que faço regularmente podem ser feitas dentro de um Design Orientado a Domínio.
Uma conclusão que comecei a chegar, especialmente em resposta à leitura mais sobre CQRS (Segmentação de Eventos e CQRS), de que talvez os objetos de domínio sejam usados apenas para fins de gravação. Para ser mais claro, parece que o que as pessoas estão sugerindo sutilmente em grande parte da documentação que li que os objetos de domínio são responsáveis por realizar operações / cálculos, validação e validação, e então existem principalmente para fornecer um caminho para a persistência através a infraestrutura fornecida em uma implementação do Repositório. Embora eu goste do fato de que isso pode simplificar muito o modelo de domínio, pois elimina a responsabilidade de expor o estado.
Se é realmente correto que objetos de domínio sejam usados principalmente como objetos somente gravação, isso levanta algumas questões para mim que espero que alguém possa responder.
- Como se executa testes de unidade em um objeto que possui setters ou métodos que modificam o estado de um objeto, mas que não fornecem nenhuma interface pública externa para ler o estado, como getters de propriedade em C #? Tudo bem expor o estado apenas com o objetivo de tornar esse objeto testável?
- Como alguém mostra ao usuário os resultados dos cálculos ou operações realizados no domínio sem ter que persistir e depois extrair os resultados do armazenamento persistente fora do contexto do domínio? Tudo bem expor o estado apenas com o objetivo de mostrar resultados.
A regra geral é que os únicos getters de propriedade (obter acessadores) devem ser aqueles que também podem ser gravados no domínio? Ou dito de maneira diferente, as propriedades somente leitura devem ser a única coisa a evitar, pois elas existem apenas para fins de leitura e, portanto, não desempenham um papel necessário no modelo de domínio real?
Material relacionado: