Eu criei um aplicativo Java MVC simples que adiciona registros através de formulários de dados a um banco de dados.
Meu aplicativo coleta dados, também os valida e os armazena. Isso ocorre porque os dados estão sendo obtidos on-line de diferentes usuários. os dados são principalmente de natureza numérica.
Agora, nos dados numéricos que estão sendo armazenados no banco de dados (servidor SQL), desejo que meu aplicativo realize cálculos e exiba os resultados. O usuário não está interessado em como os cálculos são feitos, portanto eles devem ser encapsulados. O usuário deve ser capaz de visualizar apenas os dados computados simples (por exemplo, dados da coluna A menos dados da coluna B divididos por dados da coluna C). Sei como escrever procedimentos armazenados para o mesmo, mas quero um aplicativo de três camadas.
Quero que os dados que eu coloquei no banco de dados como um registro sejam trabalhados executando cálculos nele. Os dados originais devem permanecer inalterados, enquanto os novos dados, pós-cálculos, devem ser armazenados como um novo registro de entidade no banco de dados.
Onde devo escrever o código para este cálculo em segundo plano? Como são as regras e a lógica de negócios, devo colocá-lo em novos arquivos JavaBeans?
fonte
Respostas:
A lógica de negócios deve ser colocada no modelo , e devemos ter como objetivo modelos gordos e controladores magros .
Como ponto de partida, devemos começar pela lógica do controlador. Por exemplo: na atualização , seu controlador deve direcionar seu código para o método / serviço que entrega suas alterações no modelo.
No modelo, podemos criar facilmente classes auxiliares / serviços em que as regras ou cálculos de negócios do aplicativo podem ser validados.
Um resumo conceitual
O controlador é para lógica de aplicação. A lógica específica de como seu aplicativo deseja interagir com o "domínio do conhecimento" ao qual ele pertence.
O modelo é para lógica independente do aplicativo . Essa lógica deve ser válida em todas as aplicações possíveis do "domínio do conhecimento" a que pertence.
Portanto, é lógico colocar todas as regras de negócios no modelo.
fonte
The most common mistakes are to implement application logic operations inside the controller or the view(presentation) layer.
[ php-html.net/tutorials/model-view-controller-in-php ]Como sempre, isso depende da complexidade do projeto.
Em aplicativos triviais, onde a complexidade do modelo de domínio é relativamente pequena, você pode colocar a lógica nos modelos e chamá-la por dia.
No entanto, para aplicativos não triviais com modelos complexos e muitas regras de negócios, é melhor separar as coisas um pouco mais.
Se você colocar a lógica de negócios que envolve mais de um modelo em um modelo, estará introduzindo um forte acoplamento entre esses modelos. À medida que os aplicativos continuam a crescer, esses modelos tendem a se transformar
god models
, sabendo demais. E isso rapidamente se transforma em uma grande bagunça difícil de testar e manter. Portanto, nesse caso, é benéfico colocar a lógica em uma camada separada.Ao decidir sobre abstração, sempre leve em consideração a complexidade e os objetivos do seu aplicativo e evite o excesso de engenharia. Para aplicativos triviais / pequenos, a introdução de mais camadas do que precisa aumenta a complexidade, em vez de reduzi-la.
Robert Martin (tio Bob) tem um bom post sobre este assunto: A arquitetura limpa.
fonte
The controller interprets the mouse and keyboard inputs from the user, commanding the model and/or the view to change as appropriate
. Essa é uma definição de adaptador.Colocar a lógica de negócios dentro do modelo pode parecer o melhor caminho a percorrer. O controlador recebe uma chamada do aplicativo Web remoto. O controlador no serviço da Web MVC atende a chamada e redireciona a execução para um método no BL. Agora, a lógica de negócios pode estar contida no 'Modelo', mas também pode ser posicionada em outra pasta, por exemplo, 'lógica de negócios' . Portanto, não existe uma regra rígida sobre a localização da lógica de negócios.
Estou usando um serviço da Web construído no MVC 3.0 e o contêiner da lógica de negócios é o MVC MODEL .
fonte