MVC: Qual é a diferença entre um modelo e um serviço?


15

Por que em algumas estruturas a camada lógica é chamada "Modelo", enquanto em algumas é chamada "Serviço". Eles são diferentes um do outro ou apenas diferentes por convenções de nomenclatura?


ATUALIZAÇÃO 1

A razão pela qual estou perguntando é que, no Zend Framework, um framework MVC clássico, todo mundo usa o conceito de Model. Agora estou aprendendo o AngularJS e parece que a palavra Modelo desapareceu e foi substituída pela palavra serviço.

O que notei é que um serviço é mais como um singleton que pode ser reutilizado repetidamente (exemplo: um cliente REST), enquanto um modelo está mais relacionado às manipulações de dados provenientes do controlador no padrão MVC.


Compartilhar sua pesquisa ajuda a todos. Conte-nos o que você tentou e por que ele não atendeu às suas necessidades. Isso demonstra que você dedicou um tempo para tentar ajudar a si mesmo, evita reiterar respostas óbvias e, acima de tudo, ajuda a obter uma resposta mais específica e relevante. Veja também How to Ask
gnat

Parafraseando Shakespeare: o que há em um nome, uma rosa com qualquer outro nome ainda é uma rosa. Seu modelo de aplicativo pode muito bem ser implementado como um serviço.
Jwenting

Respostas:


22

Modelo: campos que pertencem ao objeto, métodos que ajudam a obter / definir dados do objeto (um acessador de nome completo que retorna nome + sobrenome)

Serviço: Métodos para executar operações com um ou mais modelos, consulte 'unidade de trabalho', transações, etc.


Employee :: create deve apenas pegar um conjunto de dados, executar a validação do modelo, se necessário, e retornar um objeto Employee.

EmployeeService :: HireEmployee pode criar o funcionário, enviar um email de boas-vindas, criar uma caixa de correio, torná-lo um sanduíche, etc ... pode retornar o conjunto de dados ou um código de resultado, etc.


Isso também pode afetar a validação:

Validação do modelo: o funcionário deve ter um ID, nome e sobrenome e data de nascimento

Validação de serviço: Os funcionários da posição de barman devem ter 21 anos ou mais e serem aprovados por um gerente.


Obrigado pelo exemplo muito concreto que ilustra como pode ser complexa a lógica comercial das palavras reais e, portanto, por que uma camada extra de serviço pode ajudar além da camada do modelo.
Wlnirvana

3

De acordo com minha experiência, a camada Model no padrão de design do MVC refere-se a todos os componentes de software envolvidos na manipulação de dados (POJOs, DAO, até SQL, JDBC etc.).

Enquanto a camada de serviço é realmente uma adição ao MVC:

Sabemos que os componentes da camada Model são chamados dentro da camada Controller . Depois que o último é construído, você percebe que ele não parece conciso (bagunçado com código sujo); o Controlador pode não fornecer detalhes adicionais (por exemplo, formatação de parâmetros de solicitação antes de chamar um método DAO que os consumirá ...). Portanto, você pode incluir essa camada extra, a camada Serviço .

Eventualmente, você pode incluir seu código sujo dentro de métodos estáticos com um nome significativo, parâmetros e assim por diante, o que resultaria em uma camada sintética do Controlador.

Dê uma olhada neste link:

/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2


1
É exatamente assim que vejo a camada de serviço também. Mas, na maioria das vezes, vejo isso sendo usado para servir API externa no modelo de negócios. Ambos os cenários eu vejo válidos. A questão aqui está apenas no conflito da nomenclatura.
Burntblark 7/11

2

Estruturalmente, essas classes base são as mesmas, no entanto, são usadas para classificar preocupações diferentes das camadas Serviço e Modelo da implementação MVCS

Service:- A concrete service class defines the API of an external Service.

Model :- Defines the API of the applications data model.

Portanto, embora as classes base sejam iguais, as classes concretas criadas pela extensão dessas classes base têm dois propósitos totalmente diferentes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.