MVC: Quelle est la différence entre un modèle et un service?

15

Pourquoi dans certains cadres, la couche logique est appelée "modèle" alors que dans certains, elle est appelée "service". Sont-ils différents les uns des autres ou simplement différents par les conventions de dénomination?


MISE À JOUR 1

La raison pour laquelle je demande, c'est parce que dans Zend Framework, un framework MVC classique, tout le monde utilise le concept de modèle. J'apprends maintenant AngularJS et il semble que le mot Model ait disparu et ait été remplacé par le mot service.

Ce que j'ai remarqué, c'est qu'un service ressemble plus à un singleton qui peut être réutilisé encore et encore (exemple: un client REST) ​​alors qu'un modèle est plus lié aux manipulations de données provenant du contrôleur dans le modèle MVC.

Guilhem Soulas
la source
Partager vos recherches aide tout le monde. Dites-nous ce que vous avez essayé et pourquoi cela n'a pas répondu à vos besoins. Cela démontre que vous avez pris le temps d'essayer de vous aider, cela nous évite de réitérer des réponses évidentes et, surtout, cela vous aide à obtenir une réponse plus spécifique et pertinente. Voir aussi Comment demander
gnat
Pour paraphraser Shakespeare: ce qui est dans un nom, une rose sous un autre nom est toujours une rose. Votre modèle d'application peut très bien être implémenté en tant que service.
jwenting

Réponses:

22

Modèle: champs qui appartiennent à l'objet, méthodes qui aident à obtenir / définir des données à partir de l'objet (un accesseur de nom complet qui renvoie le prénom + le nom)

Service: Méthodes pour effectuer des opérations avec un ou plusieurs modèles, voir 'unité de travail', transactions, etc ...


Employee :: create devrait simplement prendre un ensemble de données, effectuer la validation du modèle si nécessaire et renvoyer un objet Employee.

EmployeeService :: locationEmployee peut créer l'employé, lui envoyer un e-mail de bienvenue, créer une boîte aux lettres, lui faire un sandwich, etc ... il peut renvoyer l'ensemble de données, ou un code de résultat, etc ...


Cela peut également affecter la validation:

Validation du modèle: l'employé doit avoir un identifiant, un prénom, un nom et un anniversaire

Validation du service: Les employés du poste de barman doivent avoir 21 ans ou plus et être approuvés par un gestionnaire.

FMJaguar
la source
Merci pour l'exemple très concret illustrant la complexité de la logique métier des mots réels, et donc pourquoi une couche de service supplémentaire peut aider en dehors de la couche modèle.
wlnirvana
3

D'après mon expérience, la couche Model dans le modèle de conception MVC fait référence à chaque composant logiciel impliqué dans la manipulation des données (POJO, DAO, jusqu'à SQL, JDBC, etc.).

Alors que la couche service est en fait un ajout à MVC:

Nous savons que les composants de la couche Model sont appelés à l'intérieur de la couche Controller . Une fois que ce dernier est construit, vous vous rendez compte qu'il n'a pas l'air concis (désordonné avec du code sale); le contrôleur peut ne pas fournir de détails supplémentaires (par exemple, les paramètres de demande de formatage avant d'appeler une méthode DAO qui vont les consommer ...). Par conséquent, vous pouvez inclure cette couche supplémentaire, à savoir la couche Service .

Finalement, vous pouvez inclure votre code sale dans des méthodes statiques avec un nom significatif, des paramètres, etc., ce qui aboutirait à une couche de contrôleur synthétique.

Jetez un œil à ce lien:

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

Mohamed Ennahdi El Idrissi
la source
1
C'est exactement ainsi que je vois la couche de service. Mais alors, le plus souvent, je le vois utilisé pour servir une API externe dans le modèle commercial. Les deux scénarios que je vois valides. La question ici est juste dans le choc de la nomenclature.
burntblark
2

Structurellement, ces classes de base sont les mêmes, mais elles sont utilisées pour classer différentes préoccupations des niveaux Service et Modèle de l'implémentation MVCS

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

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

Ainsi, alors que les classes de base se ressemblent, les classes concrètes créées en étendant ces classes de base ont deux objectifs entièrement différents.

Sagar Awasthi
la source