web-dev-qa-db-fra.com

Qu'est-ce que DAO et la couche de service dans Spring?

Qu'est-ce que DAO et la couche de service dans Spring?

Je cherche une réponse théorique.

25

Il n'y a pas de distinction en ce qui concerne le printemps. Par convention, vous pouvez marquer les classes DAO avec @Repository et les services avec @Service. En outre, le premier effectue une traduction des exceptions de la couche de persistance.

Puisque vous demandez théoriquement: DAO doit effectuer des opérations de base de données brutes et les traduire en constructions de niveau supérieur (objets, collections). Les services doivent appeler les DAO et effectuer des opérations commerciales. Généralement, la démarcation des transactions est effectuée sur la couche de service pour couvrir plusieurs appels DAO.

Enfin, DAO doit extraire la logique d’entreprise des détails de la persistance, permettant idéalement de changer de couche de persistance sans modification de la logique d’entreprise (services). Cela n’est pratiquement jamais possible du fait de des fuites d’abstraction des fournisseurs de persistance (par exemple, chargement paresseux).

50

DAO - objet d'accès aux données, sont des objets permettant de gérer la connexion à votre stockage de données (base de données typique). Vous avez ici vos questions et DAO fournit des données à vos services.

Les services doivent contenir toute votre logique. Si vous avez une logique séparée, vous pouvez théoriquement changer votre couche d'interface utilisateur ou votre couche DAO sans que cela ne soit affecté.

11
chalimartines

DAO (Data Access Object) est un modèle de conception qui consiste à créer une classe pour chaque table de votre base de données. Il fournit une technique permettant de séparer la persistance des objets et la logique d'accès aux données.

6
touti

Bien que de nombreuses années se soient écoulées depuis que cette question a été posée, il y a encore des gens (comme moi) qui veulent savoir répondre à cette question. En plus des réponses ci-dessus, je souhaite partager ce que j'ai trouvé:

Dans de nombreux codes Spring de base écrits pour les apprenants Spring, les données sont simplement stockées et lues uniquement à partir d'une base de données. Et les DAO injectent SessionFactory. Ensuite, nous avons des services qui semblent faire la même chose. Et les nouveaux apprenants se demandent pourquoi nous avons deux interfaces et classes similaires - dao et service.

Mais dans une application réelle, il peut exister d'autres types de stockage de données parallèles (par exemple, des données d'un type pourraient être stockées dans une base de données et un autre type de données stockées dans un fichier ou d'autres types de stockage pourraient être utilisés à un moment donné. ).

Et dans ce genre de cas, les classes de contrôleurs devraient injecter de nombreux types d’interfaces (une avec DB et d’autres avec des fichiers et quelques autres). Et s’il existe une application mobile qui utilise les mêmes sources de données, celle-ci configurera également tous les types de sources de données.

Ainsi, au lieu de cela, lorsque des services sont utilisés, les classes de contrôleur, les applications mobiles, etc. ne peuvent utiliser qu'un service et que le service fonctionne avec le nombre de sources de persistance des données dont nous disposons. 

Par la suite, en cas de changement du nombre ou du type de sources de persistance des données, toutes les opérations seront également effectuées dans les DAO concernées et le service, de sorte que les contrôleurs, les applications mobiles, etc. ne seront pas affectés - ils continueront à utiliser le même service.

Tout cela diminue sensiblement le volume de travail à effectuer.

Il existe un modèle de conception de façade qui recommande une telle configuration pour une meilleure conception.

Vous pouvez voir une excellente représentation graphique de cela dans cet excellent article:

https://springframework.guru/gang-of-four-design-patterns/facade-pattern/

Ainsi, bien que dans les applications de base de Spring avec une source de données utilisée par uniquement des utilisateurs d'applications Web (contrôleurs), la distinction entre scénarios réels et DAO devient évidente.

J'espère que cela t'aides.

0
Ula