Se um modelo para uma visão ser um agregado com seu próprio repositório?
-
22-08-2019 - |
Pergunta
Caso o modelo que será passado para a visão ser completamente definida por uma única chamada para um único repositório. Em outras palavras, é o modelo de um único agregado, ou deveria meu modelo ser construído a partir de Agregados separados, cada um com seu próprio repositório, na camada de serviço?
A maneira que eu tê-lo agora, é que eu simplesmente chamar um único repositório para preencher todo o modelo que é então apresentado por View. Parece Agregados, repositórios e modelos estão todos tornando-se o mesmo conceito.
Solução
O meu que é para "Nenhuma das opções acima." Eu prefiro usar modelos de apresentação de pontos de vista, e modelos de apresentação não precisa de um repositório. Há uma variedade de razões para isso:
- Usando modelos de apresentação permite que você crie pontos de vista e os controladores antes de projetar o modelo e banco de dados. Então você pode obter a entrada do usuário no início.
- modelos de apresentação permitem que você passe um modelo bastante "flat" para a vista, assim você não precisa se preocupar com as preocupações ORM tais como o carregamento lento.
- vinculativo modelos de apresentação modelo muitas vezes simplificar.
- Ao utilizar um modelo de apresentação, você não precisa se preocupar com campos acidentalmente retornando um determinado usuário não devem ser autorizados a ver, ou campos acidentalmente atualização que o usuário não devem ser autorizados a atualização, porque você não obter uma lista branca correta.
Agora, mais especificamente seguindo a linha de sua pergunta: você tem construir uma instância do modelo de apresentação? Quantos repositórios são necessários? Bem, esta pergunta agora quase responde a si mesma. Você projeta o modelo de apresentação de seguir os requisitos da vista. Você projeta os repositórios seguintes boas práticas de TDD, incluindo a identificação de raízes agregadas. Agora, a questão de "quantos repositórios que eu preciso para instanciar este modelo" é simples. Você examinar as raízes agregados requeridos pelo modelo, e usar o que você precisa. Geralmente, eu posso fazer isso em uma única consulta LINQ.