Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Onde deve ficar minha regra de negocio no padrão MVC?

pelo que vi nos cursos as regras de negocio faz parte do model,porem tem programadores que me disseram que não e correto pois se eu tiver que compartilhar o meu model com outra aplicação as regras de negocio de um sistema vão para o outro e o correto seria criar mais uma camada,isso esta correto? onde realmente deve ficar as regras de negocio? agradeço desde já pela resposta

2 respostas
solução!

Visão tradicional do MVC: o Model representa o estado: regra de negócio + dados, ou comportamento + dados.

https://martinfowler.com/eaaCatalog/domainModel.html

Se pensar que Model é "manipulação de dados", então a conclusão é embutir a lógica de negócio nessa camada.

  • Model e subclasses tendem a ficar longos
  • Model agora tem várias responsabilidades
  • Model restrito a um Domínio
  • Model tende a ficar restrito a uma aplicação (polêmico)
  • Model notifica a View ou Controller da mudança de estado
  • Model fica superutilizado: responde, manipula, notifica, etc.

Visão alternativa do MVC: o Model é separado das regras de negócio.

No diagrama acima, o Model agora é apenas aquele tambor/cilindro à direita do diagrama.

Se pensar que Model é "a fonte de dados", ou seja, uma implementação passiva do Model, então a conclusão é criar uma camada adicional chamada Domínio (ou qq nome que faça sentido pra você) com vários componentes/módulos dentro e que armazena as regras de negócio. MVCD poderia ser o nome.

  • Model fica enxuto
  • Model tem a responsabilidade única de acessar uma fonte de dados
  • Model fica subutilizado, só responde
  • Domain fica cheio de namespaces, pastas, componentes
  • Domain cuida das alterações de estado
  • Model só responde a comandos do Controller, ou da View (nesse caso, Presenter)
  • Domain fica superutilizado: manipula, notifica, etc.

Dá uma lida também nos padrões de projeto: Observer (Pub/Sub), Strategy e Composite. Factory e Decorator também podem ajudar a depender do framework usado.

Perfeito,muito obrigado,ajudou bastante