web-dev-qa-db-fra.com

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

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 modèle Word ait disparu et ait été remplacé par le service Word.

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 davantage lié aux manipulations de données provenant du contrôleur dans le modèle MVC.

16
Guilhem Soulas

Modèle: champs qui appartiennent à l'objet, méthodes qui aident à obtenir/définir les données 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.

22
FMJaguar

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

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

Nous savons que les composants de la couche modèle sont invoqués à l'intérieur de la couche contrôleur . Une fois que ce dernier est construit, vous réalisez 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 va 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 Controller synthétique.

Jetez un œil à ce lien:

https://stackoverflow.com/questions/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-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 la mise en œuvre 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 sont similaires, les classes concrètes créées en étendant ces classes de base ont deux objectifs entièrement différents.

2
Sagar Awasthi