Como fazer com que os modelos façam mais do que definir e obter dados e validação

8

Estou fazendo essa pergunta porque, depois de desenvolver algumas pequenas soluções personalizadas de cms em uma estrutura, desenvolvi a ideia de que os modelos podem ser facilmente substituídos por ORMs, o que facilita a tarefa de validar, obter e definir dados, pois é tudo o que eles precisam para .
Recentemente, recebi um pedido de uma solução complexa de gerenciamento de clientes personalizados. Depois de pesquisar um pouco sobre como proceder, encontrei o seguinte:
http://blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/

Now a idéia não é nova, pois foi o que eu li sobre a abordagem MVC, os modelos lidam com a lógica de negócios. Mas estou achando difícil planejar uma abordagem na qual os Modelos lidem com a lógica de negócios e sejam classes que são completas por si mesmas, devido ao tipo de trabalho com o qual me acostumei.
Por favor me ajude aqui, explicando a idéia e apontando-me para alguns exemplos, artigos, etc.

kapv89
fonte
Boa pergunta. Eu não pensei sobre isso antes.
Saeed Neamati
Belo link ... que tecnologia de desenvolvimento você está usando ... ASP.Net?
precisa saber é o seguinte
Resumo, uso a ovelha negra das tecnologias de desenvolvimento, php. No entanto, tornou-se muito bom desde 5.3. Usado para trabalhar em codeigniter, agora trabalhar em fuelphp (basicamente um codeigniter para PHP5.3)
kapv89

Respostas:

5

Você deve ler mais sobre o Domain Driven Design . Basicamente, você tenta capturar os requisitos dos negócios em um modelo puro (na maioria dos modelos de objetos) que pode executar todas as tarefas lógicas de negócios necessárias. Esse modelo pode ser chamado a partir de uma camada de aplicativo (por exemplo, a visualização ou o controlador no MVC, no MVP você o chama e o ajusta para a GUI em um Presenter). O modelo também deve ser o mais ignorante possível sobre persistência e outras coisas técnicas.

Encapsular a lógica de negócios em um modelo de domínio como esse tem algumas grandes vantagens:

  • Reutilização
  • Facilidade de uso e extensão
  • Geralmente leva a uma arquitetura melhor
  • Comunica claramente as coerências e os requisitos de negócios ...
  • ... e, assim, melhora a comunicação entre desenvolvedores, clientes, analistas, etc.

Eu recomendo o livro de Eric Evan sobre Design Orientado a Domínio para uma leitura mais aprofundada, pois ele irá direcioná-lo na direção certa e dar alguns bons exemplos de onde colocar qual lógica. Aposto que, quando você o ler, uma grande porcentagem de suas entidades conterá mais do que dados simples .

Mas estou achando difícil planejar uma abordagem na qual os Modelos lidem com a lógica de negócios e sejam classes que são completas em si mesmas.

Suponho que, por modelo, você esteja se referindo principalmente a entidades nesse contexto. Colocar a lógica / comportamento comercial nas entidades não é uma tarefa trivial. Mas você deve sempre pensar sobre o que uma entidade é eo que uma entidade faz . Tem algumas responsabilidades ou comportamentos? Às vezes, é bom ter entidades simples se comportamentos ou responsabilidades forem melhor expressos como serviços.

Suponha que você tenha um animal. Embora seus atributos possam ser salvos diretamente em um banco de dados, ele também possui algum comportamento. Precisa comer. Mas um herbívoro não come carne, então você precisa garantir que ele mostre seu comportamento quando o programador quiser que consuma carne à força. Ele pode se mover e fazer seu próprio ruído exclusivo. Essas são algumas coisas que devem ser modeladas na entidade, por exemplo. Você com certeza não confiaria em serviços procedimentais para fazer esses animais comerem, se moverem ou fazerem barulho.

Mas todos os exemplos são superficiais sem um domínio comercial concreto. Portanto, pense no domínio do seu negócio e em suas entidades, comportamentos e responsabilidades. Um outro domínio comercial pode conter entidades que se parecem muito com alguém de fora, mas são realmente algo completamente diferente ou mostram um comportamento totalmente diferente. O modelo precisa antes de tudo descrever o domínio de seus usuários o mais preciso possível.

Falcão
fonte
isso é uma resposta muito informativa. Obrigado. Pelo que entendi, talvez seja necessário estender as classes orm para adicionar a funcionalidade de que preciso, ou melhor, definir uma segunda camada de modelos sobre a camada ORM que aplique a lógica de negócios aos objetos nos quais trabalha. Estou acertando? (Além disso, estou ordenando que o livro de imediato)
kapv89
Não é possível editar mais, mas, estendendo os calsses ORM, quero dizer estendendo os modelos que representam o banco de dados
kapv89
@ kapv89: Às vezes, é melhor agrupar / estender as classes, principalmente para transferências. Consulte o padrão DTO (Data Transfer Object) para obter mais informações.
Falcon
Estive pensando sobre o que você disse em seu post e lendo sobre modelos de gordura e Design orientado a domínio. Acho que agora tenho uma idéia de como realizar esse projeto. Obrigado. i também ordenou que o livro e lê-lo enquanto estiver trabalhando neste projeto
kapv89