Pergunta

Então, eu tenho um aplicativo MVC e em outro projeto eu tenho uma coleção normal de aulas que lidam com a lógica de negócios e dados para a aplicação. Eu também tenho alguma lógica no modelo do projeto MVC si. Este alças lógica ViewModels e similares, coisas que não poderiam ter sido feitas no projeto n-tier como eles se relacionam com o projeto MVC-se e necessidade de estar no mesmo projeto.

As minhas perguntas são:

  • deve minhas classes de modelo têm o conhecimento da lógica de negócios n-tier? Ou deve somente o controlador tem esse conhecimento e enviar dados e para trás entre a aplicação n-tier eo modelo MVC, conforme necessário?
  • Se é ok para o meu modelo para referenciar o aplicativo n-tier, em seguida, deve o meu acesso ao controlador de n-tier através da classe modelo?

Espero que isso faz sentido, achou difícil palavra corretamente para obter o meu ponto de vista.

Foi útil?

Solução

De um modo geral aqui - suas classes de modelo não deve ter conhecimento de lógica de negócios. Eles devem ter apenas a informação necessária para exibir a vista para o utilizador (DTOs uso como sugerido por mxmissile).

A sua lógica de negócios seria ou em seu controlador, ou (melhor) em uma camada de serviço separado chamado por seu controlador. Tendo métodos em um modelo que, por exemplo, desvio o controlador e fazer chamadas diretamente para o banco de dados é quase sempre uma má prática.

A idéia aqui é fazer com que os pontos de vista tão idiota quanto possível. Você envia-lhes um modelo, eles puxe a dados de que necessitam, formate-o de forma adequada, e exibi-lo. Isso torna muito mais fácil para criar novas visualizações dos mesmos dados mais tarde, se você decidir que quer mudar a apresentação.

Outras dicas

Pense em seus modelos como apenas recipientes para dados entre os controladores e os seus pontos de vista. Essencialmente DTOs.

As suas aulas ViewData / ViewModel em seu aplicativo MVC pode conter instâncias de suas classes Model (o meu fazer). Meus controladores de ligar para os meus serviços de negócios e são responsáveis ??por qualquer tradução entre ViewData e modelos.

Se é ok para o meu modelo de referência a aplicação n-tier, em seguida, deve o meu de acesso ao controlador de n-camadas por meio do modelo classe?

Eu não iria através do modelo para chegar às camadas de aplicações, eu teria que o controlador seja esse componente interface. As chamadas do controlador para as suas camadas de aplicações que retornam instâncias do seu modelo de seus componentes de acesso a dados. Você pode então traduzir essas instâncias em objetos mais consumíveis usando um objeto ViewData / ViewModel. Você pode fazer isso em um controlador, ou usar uma classe montador separado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top