190 votes

Différence entre dépôt et service ?

Quelle est la différence entre un dépôt et un service ? Je n'arrive pas à la saisir.

Je parle de l'accès aux données par le biais d'une couche d'accès aux données, typiquement avec linq to sql.

Très souvent, je vois des référentiels avec des méthodes CRUD simples, et des services avec des méthodes plus spécifiques à l'entreprise.

Nous pouvons prendre cette à titre d'exemple. Si vous regardez les interfaces en bas (images), il a deux dépôts et deux services. Comment savoir quoi mettre où ?

Comme je l'ai dit, les référentiels semblent plus adaptés aux opérations de type CRUD et les services sont plus orientés vers les entreprises.

270voto

David Stratton Points 45298

Le référentiel est l'endroit où les données sont stockées. Le service est ce qui manipule les données.

Dans une comparaison avec le monde réel, si votre argent est stocké dans le coffre-fort d'une banque, le coffre-fort est le dépôt. Le guichetier qui dépose, retire, etc. est le service.

137voto

jlembke Points 4551

Un référentiel est essentiellement une façade pour persistance qui utilise une sémantique de type collection (ajout, mise à jour, suppression) pour fournir un accès aux données/objets. C'est un moyen de découpler la façon dont vous stockez les données/objets du reste de l'application.

Un service fournit une coordination ou d'autres "services" nécessaires au fonctionnement de votre application. Ils sont très différents en ce sens que les services ne savent généralement pas comment accéder aux données de la persistance, et que les référentiels sont généralement les suivants seulement accéder aux données/objets pour tout service que vous pourriez avoir.

18voto

KLE Points 11711

Je dirais qu'il s'agit d'un premier essai, au sens général (jusqu'à ce que vous donniez plus de contexte, si vous en avez un) :

  • a dépôt est l'endroit où vous placez certains objets globaux, qui seront utilisés ultérieurement.
  • a service est un code de logique d'entreprise, rendu explicite (et idéalement séparé de la couche de présentation et de la couche de base de données).

13voto

Slycreator Points 480

Prenons l'exemple d'une application MVC : le contrôleur donne des instructions au service et le service communique avec le référentiel pour effectuer des opérations CRUD sur les données de la base de données.

Cela se fait en utilisant l'injection de dépendance (DI) : c'est comme si un enfant demandait à son père de lui donner de l'argent, mais sans se soucier de la façon dont l'argent est obtenu, de sorte que les méthodes d'obtention de l'argent ont été abstraites de la connaissance de l'enfant).

Le référentiel communique avec la base de données soit en utilisant une requête SQL brute, soit via un ORM (par exemple Eloquent, Sequelize, Gorm, Hibernate, etc.).

Le service appelle une ou plusieurs méthodes du référentiel pour obtenir un résultat spécifique (dans le service, vous pouvez appeler une méthode type du référentiel appelée findOne() et ensuite, en fonction du résultat, vous pouvez appeler updateOne()).

9voto

cjadd7 Points 21

Un référentiel gère l'accès aux données et le service y fait appel après avoir exécuté toute logique commerciale nécessaire.

La réponse de @David m'a beaucoup aidé mais j'aimerais biaiser un peu son approche.

La métaphore bancaire : La banque conserve votre argent dans un coffre-fort, le coffre-fort est une base de données. Le caissier peut déposer ou retirer de l'argent de la chambre forte, il est le dépositaire. Le client est celui qui demande au guichetier de déposer ou de retirer, le client est le service.

Vous pouvez même aller plus loin et dire que votre employeur (celui qui signe votre chèque) est le contrôleur :D

Le contrôleur vous remet votre chèque -> vous le validez pour vous assurer que tout est correct avant de le remettre au caissier -> le caissier le dépose.

En réfléchissant de cette manière, vous pouvez voir que le référentiel ne se préoccupe que des opérations ou transactions de base de données, et que de nombreux services/clients peuvent s'adresser au même référentiel/collecteur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X