Modelo de domínio e consulta


8

Eu sou novo no DDD, pois trabalhei apenas em aplicativos de Transaction-Script com um modelo anêmico ou apenas Big Balls of Mud, então, perdoe qualquer terminologia que eu abuse.

Estou tentando entender a separação adequada entre o modelo de domínio e o repositório. Qual é a maneira correta de construir um objeto de domínio proveniente de um banco de dados, assumindo a necessidade (incrivelmente simplificada) de procurar objetos por status (retornos enumerable) ou por ID.

  • Uma fábrica deve estar construindo os objetos, expondo métodos para GetByStatus()e GetByID(), usando um repositório DIed?
  • Um repositório deve ser chamado diretamente, sabendo como criar um modelo de domínio a partir do DTO?
  • O modelo de domínio deve ter um construtor para obter o ID, usando um repositório DIed para carregar o estado inicial, usando algum outro método (?) Para a lista?

Não tenho muita certeza de qual seria o melhor caminho, e essa pergunta tem uma resposta defendendo cada uma delas (essas certamente são exclusivas da mutuallu).

Respostas:


6

Repositório é um serviço de modelo de domínio, que tem a responsabilidade de servir como camada entre o seu domínio e o armazenamento de dados. Ele deve ter um método para consultar entidades e métodos para salvá-los e atualizá-los.

Para responder sua pergunta:

  • Eu diria que não. Acho que se você usa fábricas para criar seu objeto de domínio, deve ser óbvio que o objeto de domínio vem do armazenamento de dados e não é criado novamente.
  • Sim se você quiser. Eu acho que isso é muito próximo aos detalhes da implementação e pode ser deixado em você.
  • Definitivamente não. Como eu disse, deve ser óbvio de onde a entidade vem.

Além disso, se você estiver usando uma estrutura ORM, essa estrutura já será uma forma de repositório. Faça pleno uso dele e não reinvente a roda ou adicione uma camada desnecessária de complexidade sobre ela.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.