2010-08-25 28 views
0

Je ne sais pas où faire des recherches de base de données pour les contrôleurs Spring.Dois-je créer plusieurs services (en utilisant le stéréotype Spring @ @ Service) pour effectuer des recherches dans la base de données pour différents contrôleurs?

Il semble logique d'utiliser le stéréotype Spring @Service et de créer plusieurs «services» pour fournir un support de recherche aux contrôleurs plutôt que d'effectuer des recherches directement dans les contrôleurs.

Est-ce correct ou existe-t-il un endroit plus approprié pour effectuer des recherches dans la base de données?

Répondre

2

Je ne pense pas que les contrôleurs devraient faire des recherches dans la base de données. Si vous abandonnez votre niveau Web, la fonctionnalité de recherche disparaît.

Je mettrais ceux derrière une couche d'interfaces de référentiel. Vous pouvez les tester sans le niveau Web de cette façon. Il pourrait également y avoir une couche de service distincte qui possédait des unités de travail et des transactions. Les recherches doivent être en lecture seule, elles peuvent donc être assez sûres pour appeler directement depuis les contrôleurs.

C'est l'idiome de printemps recommandé.

+0

Merci. Cela a du sens, surtout en ce qui concerne «ce qui arrive si vous vous débarrassez du niveau Web» - je n'avais pas pensé à cette possibilité. Mais pourriez-vous expliquer ce que vous entendez par "interfaces de dépôt" - je suppose que c'est le "ça" dans "C'est l'idiome de printemps recommandé"? Existe-t-il des recommandations sur ce à quoi devrait ressembler la "couche de service séparée" et quand vous dites "séparé", voulez-vous dire qu'il est "séparé" de la "couche des interfaces de référentiel"? – Cornish

+0

"Repository" == "Objet d'accès aux données" == "DAO" C'est une interface pour les opérations CRUD. Et oui, il existe une autre interface pour les services qui orchestrent les DAO et les objets de modèle pour implémenter des cas d'utilisation. – duffymo