web-dev-qa-db-fra.com

Quand dois-je appeler mon contrôleur de classe, mon manager ou mon service?

C'est peut-être évident pour vous. Je suis nouveau à Java (travail semestriel) et j'ai eu une discussion avec mes collègues. J'ai du mal à nommer mes classes en fonction de leurs responsabilités. Pour cela, mes classes acquièrent des responsabilités qu'elles ne devraient jamais avoir.

Pouvez-vous m'aider?

BTW: Je travaille actuellement sur un projet où je dois utiliser une couche de persistance des classes de service. J'ai divisé mes forfaits en fonction du modèle, du service et de la persistance.

45
MartinL

Il y a certains modèles et directives derrière ce terme, sur lequel je le base habituellement:

Controller est basé sur le modèle Model-View-Controller design et doit être utilisé explicitement pour les classes qui implémentent la fonctionnalité du contrôleur basé sur ce modèle de conception. Par exemple. si vous utilisez Spring MVC et que vous étendez à partir d'une des classes Controller.

Le service est un peu moins spécifique, mais je recommande de baser l'implémentation sur le modèle Service Layer de "Patterns de l'architecture des applications d'entreprise ". Fondamentalement, lorsqu'un contrôleur est plus spécifique à la plate-forme (par exemple, le transport via HTTP et le rendu de l'hypertexte, généralement HTML pour les contrôleurs Web), un service ne devrait pas avoir à savoir qui l'utilise et comment. Vous fournissez simplement une interface uniforme qui peut être utilisée à son tour par exemple un contrôleur web.

Les gestionnaires bien ... gérer les choses. Connexions, contexte d'application, sessions; généralement comme un emplacement central où les composants de l'application peuvent communiquer.

51
Daff

Pour ajouter aux bonnes réponses déjà données, si vous trouvez que vous avez du mal à trouver un nom approprié pour vos classes, alors vous devriez peut-être vérifier si vos classes ont plus d'une responsabilité. Si tel est le cas, vous devez définitivement refactoriser votre code pour isoler les responsabilités dans des classes distinctes.

14
Laf

Pour la convention de dénomination, veuillez lire l'officiel convention .

Manager - Comme son nom l'indique qui gère les choses dans votre code comme EntityManager, il gère les entités, TransactionManager - Il gère les transactions. Vous pouvez donc avoir quelque chose appelé SecurityManager qui gère quel Algo utiliser pour le cryptage e.t.c

Contrôleur - Encore une fois, le nom parle beaucoup, contrôle la façon dont ce qui doit être fait ou comment les choses doivent être faites. Par exemple ActionController - prend soin de ce qu'il faut faire lors de la réception d'un événement d'action utilisateur

Service - Considérez-le comme quelque chose comme postalService, une tâche exécutée par quelqu'un sur une note générale, vous pouvez l'utiliser.

Le code d'emballage a besoin de beaucoup de réflexion, l'emballage de votre application doit toujours s'aligner sur le modèle commercial auquel il répond.

Parallèlement au modèle commercial, vous devez vous demander si la fonctionnalité est très au cœur de l'application, vous allez donc la déplacer vers le cœur, dire si la fonctionnalité est destinée à parler à une autre application, vous souhaitez la déplacer en cours d'intégration, etc. .

11
mprabhat

Je ne sais pas si j'ai déjà nommé un directeur de classe, donc je vais le laisser de côté.

Pour moi contrôleur est quelque chose qui contrôle ou décide où quelque chose (signal, message, ..) doit aller.

Le service est une interface (et la mise en œuvre de cette interface) fournissant certaines fonctionnalités, généralement à la frontière du système ou du sous-système. Masque autant que possible les détails de mise en œuvre.

1
Rostislav Matl