Je travaille avec un système où le "vous ne pouvez pas avoir les contrôleurs interagissent avec les DAO!" La philosophie de conception a été adoptée à un moment donné et une couche de service a été créée pour chaque composant. Comme vous le décrivez, la plupart des services sont simplement délégués à un DAO. Je m'oppose à cette philosophie pour deux raisons.
On est le bon vieux "Vous n'en aurez pas besoin". N'implémentez pas quelque chose tant que vous n'en avez pas besoin. Juste parce que vous prévoyez une raison d'avoir une couche supplémentaire d'indirection pour faire une logique supplémentaire, ce n'est pas sûr que vous en aurez besoin. Et quand vous finissez par en avoir besoin, vous découvrirez probablement que vos attentes ne correspondaient pas vraiment à ce que vous croyiez plus tôt. Et vous obtenez un coût supplémentaire, parce que maintenant vous devez tester deux classes au lieu d'une, et il n'est pas rare que vous ayez besoin d'ajouter des méthodes à deux endroits au lieu d'un.
La seconde est, qu'est-ce que c'est que le service? Quand je modélise mon domaine, j'essaie de penser en termes orientés objet. Il y a des utilisateurs, donc la classe User a du sens. Il y a des nouvelles, donc la classe NewsItem a du sens. Mais je ne sais même pas ce qu'un UserService est censé faire. Contenir la "logique métier" pour les utilisateurs? Non, c'est la raison pour laquelle la classe User est là.
Si vous avez besoin de maintenir une API stricte pour le "monde extérieur", alors je peux voir un cas pour avoir une couche supplémentaire qui reste inchangée. Mais dans tous les autres cas, vous n'en aurez pas besoin.
Que voulez-vous dire s'il s'agit d'un mannequin? Je pensais que c'était comme ça? DAO doit être aussi simple et aussi fictif que possible? Si vous faites des DAO compliqués, c'est probablement que vous avez déjà mélangé la logique métier à l'intérieur? – Aubergine
Si vous avez un DAO qui appelle simplement la méthode d'EntityManager et c'est tout, pourquoi avez-vous besoin du DAO? Pourquoi ne pas utiliser EntityManager directement? J'utiliserais un DAO si par exemple je veux construire une requête en utilisant l'API de critères, qui peut prendre beaucoup de lignes et je ne veux pas me mêler à ma logique métier. –
Je sens que je parle de choses différentes, je considère un cas où: Nous avons le DAO a quelques méthodes pour accéder à DB. Et nous avons une méthode unique d'objet de service qui utilise seulement la méthode simple de ce DAO pour accomplir son travail. Est-il faisable de créer une seule méthode dans l'objet de service qui utilise seulement la méthode d'un seul DAO, quand nous pouvons employer directement la méthode de DAO. Parlez-vous de la même chose? J'ai beaucoup de méthodes 'EntityManager'. – Aubergine