1198 votes

Nommage des Classes - comment faire pour éviter d’appeler tout un «<WhatEver>Manager " ?</WhatEver>

Il y A longtemps j'ai lu un article (je pense à une entrée de blog) qui m'a mis sur le "droit" de la piste sur le nommage des objets: Être très très scrupuleux sur la nommant les choses dans votre programme.

Par exemple, si ma demande était (comme une entreprise typique app) manipulation des utilisateurs, des entreprises et des adresses j'aurais User, Company et Address domaine de classe et probablement quelque part un UserManager, CompanyManager et AddressManager pop up qui gère ces choses.

Alors pouvez-vous dire ce que ceux - UserManager, CompanyManager et AddressManager ? Non, parce que le Gestionnaire est une très très terme générique qui s'adapte à tout ce que vous pouvez faire avec votre domaine d'objets.

L'article que j'ai lu recommandé à l'aide de très des noms propres. Si c'était une application C++ et l' UserManager'emploi a allouer et de libérer les utilisateurs dans le tas il ne serait pas gérer les utilisateurs, mais la garde de leur naissance et de la mort. Hmm, peut-être que nous pourrions appeler cela un UserShepherd.

Ou peut-être l' UserManager's de travail est d'examiner chaque Utilisateur de l'objet de données et de signer les données du point de vue cryptographique. Ensuite, nous aurions UserRecordsClerk.

Maintenant que cette idée coincé avec moi, j'essaie de l'appliquer. Et de trouver cette simple idée incroyablement dur.

Je peux décrire ce que les classes et (tant que je ne glisse pas dans le quick & dirty codage) les classes j'écris n'exactement une chose. Ce qui me manque pour aller à partir de cette description pour les noms est une sorte de catalogue des noms, un vocabulaire qui mappe les concepts de noms.

Finalement, j'aimerais avoir quelque chose comme un modèle de catalogue dans mon esprit (souvent des modèles de conception facilement fournir les noms d'objet, par exemple une usine)

  • L'usine, qui Crée d'autres objets (nom pris à partir du modèle de conception)
  • Berger - berger gère la durée de vie des objets, leur création et à l'arrêt
  • Synchroniseur - Copie de données entre deux ou plusieurs objets (ou des hiérarchies d'objets)
  • Nounou - Aide les objets atteindre "utilisable" de l'état après la création - par exemple par le câblage à d'autres objets

  • etc etc.

Alors, comment vous résoudre ce problème? Avez-vous un fixe vocabulaire, ne vous inventer de nouveaux noms à la volée ou vous envisagez de nommer les choses n'est pas si important ou faux?

P. S.: je suis aussi intéressé par des liens vers des articles et des blogs de discuter de la question. Pour commencer, voici l'article original qui m'a fait penser à ça: Nommage des Classes Java sans un "Manager"


Mise à jour: Résumé des réponses

Voici un petit résumé de ce que j'ai appris de cette question dans l'intervalle.

  • Essayez de ne pas créer de nouvelles métaphores (Nounou)
  • Jetez un oeil à ce que d'autres cadres n'

Plus d'articles ou de livres sur ce sujet:

Et une liste de préfixes/suffixes j'ai recueilli (subjectivement!) à partir des réponses:

  • Coordonnateur
  • Constructeur
  • Auteur
  • Lecteur
  • Gestionnaire
  • Conteneur
  • Protocole
  • Cible
  • Convertisseur
  • Contrôleur
  • Vue
  • Usine
  • Entité
  • Seau

Et un bon conseil pour la route:

Ne pas obtenir de nommage de la paralysie. Oui, les noms sont très importants, mais ils ne sont pas assez importants pour les déchets d'énormes quantités de temps. Si vous ne pouvez pas penser une bonne réputation en 10 minutes, passer.

207voto

Chris S Points 32376

J'ai posé une question similaire, mais si possible j'essaye de copier les noms déjà dans le .NET framework, regardez les idées de la Java et Android cadres.

Semble Helper, Manager, Util est l'inévitable nom, vous fixez pour la coordination des classes qui ne contiennent pas d'état et sont généralement de procédure et statique. Une alternative est - Coordinator.

Vous pourriez obtenir en particulier violet prosey avec les noms et aller pour des choses comme Minder, Overseer,Supervisor,Administrator,Master mais comme je l'ai dit je préfère le garder comme le cadre de noms que vous avez utiliser pour.

D'autres suffixes (si c'est le bon terme), vous pouvez également trouver dans le .NET framework sont

  • Builder
  • Writer
  • Reader
  • Handler
  • Container

117voto

Markus Meyer Points 124

Vous pouvez prendre un coup d'oeil à source-code-wordle.de, j'ai analysé il y a le plus fréquemment utilisé pour les suffixes des noms de classe de l' .NET framework et quelques autres bibliothèques.

Le top 20:

  • attribut
  • type
  • helper
  • collection
  • convertisseur
  • gestionnaire
  • info
  • fournisseur
  • exception
  • service
  • élément
  • le gestionnaire de
  • nœud
  • option
  • usine
  • contexte
  • article
  • designer
  • la base de
  • l'éditeur

65voto

CesarGon Points 8710

Je suis tout à fait pour les bons noms, et j'écris souvent sur l'importance de prendre grand soin dans le choix des noms pour les choses. Pour cette même raison, je me méfie des métaphores au moment de nommer les choses. Dans la question d'origine, "l'usine" et "synchroniseur" ressembler à de bons noms pour ce qu'ils semblent dire. Cependant, "pasteur" et "nounou" ne le sont pas, car elles sont basées sur des métaphores. Une classe dans votre code ne peut pas être littéralement une nounou; vous appelez cela une nounou parce qu'il s'occupe d'autres choses très semblable à une vraie vie de nounou s'occupe des bébés ou des enfants. C'est OK dans le discours informel, mais pas OK (à mon avis) pour nommer les classes dans le code qui devra être conservée par on ne sait qui, qui sait quand.

Pourquoi? Parce que les métaphores de la culture dépendante et souvent personne dépendante. Pour vous, la dénomination d'une classe de "nounou" peuvent être très clair, mais c'est peut-être pas clair pour quelqu'un d'autre. Nous ne devrions pas compter sur ça, sauf si vous écrivez du code qui est uniquement pour une utilisation personnelle.

Dans tous les cas, la convention peut faire ou défaire une métaphore. L'utilisation de "l'usine" lui-même est basé sur une métaphore, mais qui a été autour depuis un certain temps et est actuellement assez bien connue dans le monde de la programmation, donc je dirais que c'est sûr à utiliser. Cependant, la "nounou" et "berger" sont inacceptables.

39voto

John Points 11550

Sonne comme une pente glissante à quelque chose que j'avais posté sur thedailywtf.com... "ManagerOfPeopleWhoHaveMortgages", etc

Je suppose que c'est juste que l'on monolithique Gestionnaire de classe n'est pas une bonne conception, mais à l'aide de "Manager" n'est pas mauvais. Au lieu de UserManager nous pourrions briser à UserAccountManager, UserProfileManager, UserSecurityManager, etc. "Manager" est un bon mot, car il montre clairement une classe ne représente pas un monde réel "chose". 'AccountsClerk' - comment suis-je censé dire si c'est une classe qui gère les données de l'utilisateur, ou représente quelqu'un qui est un Commis aux Comptes pour leur travail?

25voto

stusmith Points 8588

Puisque vous êtes intéressé par des articles dans ce domaine, vous pourriez être intéressé par Steve Yegge l'avis de l'article "Exécution dans le Royaume des Noms":

http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html

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