Derik Whitaker postou um artigo alguns dias atrás que atingiu um ponto que eu estava curioso há algum tempo: a lógica de negócios deve existir nos controladores?
Até agora, todas as demonstrações do ASP.NET MVC que vi colocam o acesso ao repositório e a lógica de negócios no controlador. Alguns até lançam validação lá também. Isso resulta em controladores bastante grandes e inchados. Esta é realmente a maneira de usar o framework MVC? Parece que isso vai acabar com uma grande quantidade de código duplicado e lógica espalhada por diferentes controladores.
asp.net-mvc
design-patterns
controller
business-logic
Kevin Pang
fonte
fonte
Respostas:
A lógica de negócios realmente deve estar no modelo. Você deve buscar modelos gordos, controladores magros.
Por exemplo, em vez de ter:
Eu preferiria ter:
Isso pressupõe que o imposto é calculado por um serviço externo e requer que seu modelo conheça as interfaces de seus serviços externos.
Isso faria com que seu controlador se parecesse com:
Ou algo assim.
fonte
Eu gosto do diagrama apresentado por Microsoft Patterns & Practices . E eu acredito no ditado 'Uma imagem vale mais que mil palavras'.
fonte
Esta é uma questão fascinante.
Eu acho que é interessante que um grande número de aplicativos MVC de amostra realmente falhe em seguir o paradigma MVC no sentido de realmente colocar a "lógica de negócios" inteiramente no modelo. Martin Fowler apontou que MVC não é um padrão no sentido do Gang Of Four. Pelo contrário, é paradigma de que o programador deve adicionar padrões para se eles estão criando algo além de um aplicativo de brinquedo.
Portanto, a resposta curta é que a "lógica de negócios" realmente não deveria residir no controlador, uma vez que o controlador tem a função adicional de lidar com a visualização e as interações do usuário e queremos criar objetos com apenas um propósito.
Uma resposta mais longa é que você precisa pensar um pouco no design da camada do modelo antes de apenas mover a lógica do controlador para o modelo. Talvez você possa lidar com toda a lógica do aplicativo usando REST, caso em que o design do modelo deve ser bastante claro. Caso contrário, você deve saber qual abordagem usará para evitar que seu modelo fique inchado.
fonte
Você pode verificar este tutorial incrível de Stephen Walther que mostra Validando com uma camada de serviço .
fonte
A lógica de negócios não deve estar contida em controladores. Os controladores devem ser o mais magros possíveis, de preferência, seguir o padrão:
Além disso, os controladores podem conter alguma lógica de aplicação.
Então, onde coloco minha lógica de negócios? No modelo.
O que é modelo? Essa é uma boa pergunta. Consulte o artigo Padrões e Práticas da Microsoft (parabéns a AlejandroR pelo excelente achado). Aqui, existem três categorias de modelos:
Claro, MVC é um paradigma que vem em diferentes variedades. O que eu descrevo aqui é MVC ocupando apenas a camada superior, vide este artigo na Wikipedia
fonte
Se você usar injetores de dependência, sua lógica de negócios irá para eles e, portanto, você obterá controladores organizados e limpos.
fonte