Eu já vi várias configurações para persistir informações no banco de dados. Geralmente, três tipos de design parecem comuns no meu canto do mundo:
- Controlador gerencia a persistência
- O modelo gerencia a persistência
- A biblioteca de terceiros gerencia a persistência, geralmente exigindo algum tipo de anotação no modelo.
Gostaria de saber qual configuração (se houver) é, conceitualmente, a mais fácil de usar / mais compatível com uma arquitetura MVC?
(Se não for o que eu listei, forneça um resumo / visão geral como parte da resposta)
Realisticamente, o MVC é principalmente um padrão de implementação de interface do usuário, portanto a questão é um tanto discutível. No entanto, existem realmente apenas duas opções gerais. Seu controlador normalmente envia solicitações para carregar ou salvar entidades em seu modelo usando 1) uma camada de serviço de algum tipo ou 2) o padrão Active Record.
A camada de serviço pode assumir várias formas, embora minha preferência pessoal seja trabalhar com uma abstração de repositório para as entidades raiz agregadas, cujas implementações concretas funcionarão com algum tipo de ORM ou um DAO leve ou um API para algum armazenamento não relacional, se isso fizer sentido para o aplicativo.
O padrão Active Record significa que seu modelo tem responsabilidade pela persistência, embora geralmente signifique uma classe base de algum tipo que gerencia os mapeamentos para sua loja, portanto, seu modelo não está diretamente envolvido diretamente.
Basicamente, o controlador despacha solicitações para persistir objetos, seja uma chamada para seu repositório, sua implementação UnitOfWork ou o método Save em suas entidades. Se você estiver usando repositórios, seus objetos de modelo ignoram a persistência.
fonte
Em um sistema MVC (model-view-controller), o modelo contém os dados. Então, acredito que a persistência do banco de dados deve estar nela.
fonte
A maioria das amostras de MVC de alto nível que eu já vi possuem uma
infrastructure
camada separada que possui o código de implementação do banco de dados real (ou seja, as chamadas específicas para NHibernate, EF ou Linq ou qualquer que seja sua camada de dados), enquanto a camada "model" (geralmente também a camada "Domínio") possui as interfaces que definem os serviços de dados.fonte
A prática padrão no MVC é incluir estrutura e persistência de dados na camada M (odel).
A camada de modelo não inclui apenas as classes (POCOs etc) que você usará em seu aplicativo. Eles incluem os repositórios para essas classes.
Um exemplo seria um repositório em que você tem um monte de instâncias de classes de dados, ou seja:
Você será capaz de organizar melhor o domínio do modelo e também terá acesso aos seus dados de várias maneiras, mas ainda assim a camada de dados / modelo será compacta e robusta.
fonte