96 votes

Quelle est la meilleure approche pour le nommage des classes?

Venir avec, précise noms de classes est notoirement difficile. Fait à droite, il rend le code plus et l'auto-documentation fournit un vocabulaire permettant de raisonner sur le code à un niveau d'abstraction supérieur.

Les Classes qui implémentent l'un particulier de modèle de conception pourrait être donné un nom basé sur le bien connu nom de modèle (par exemple, FooFactory, FooFacade), et des classes qui directement du modèle de domaine concepts peuvent prendre leurs noms de domaine du problème, mais ce que sur les autres catégories? Est-il quelque chose comme un programmeur de dictionnaire des synonymes que je peux tourner quand je suis en manque d'inspiration, et que vous souhaitez éviter l'utilisation de générique les noms de classe (comme FooHandler, FooProcessor, FooUtils, et FooManager)?

61voto

Marcio Aguiar Points 6715

Je vais citer quelques passages de la mise en Œuvre des Schémas par Kent Beck:

Simple Nom De La Superclasse

"[...] Le nom doit être court et percutant. Cependant, pour rendre les noms précis parfois, semble avoir besoin de plusieurs mots. Un moyen de sortir de ce dilemme est sélection d'une forte métaphore de l' le calcul. Avec une métaphore de l'esprit, même de simples mots apportent avec eux une riche réseau d'associations, de connexions,de et les implications. Par exemple, dans le HotDraw dessin cadre, mon premier nom d'un objet dans un dessin DrawingObject. Ward Cunningham est venu avec la typographie métaphore: un le dessin est comme un imprimé, mis en page. Les éléments graphiques sur une page sont les chiffres, de sorte que la classe est devenu la Figure. Dans le contexte de la métaphore, Figure est en même temps la plus courte, plus riche, et plus précis que DrawingObject."

Qualifié De Sous-Classe Nom

"Les noms des sous-classes ont deux emplois. Ils ont besoin de communiquer, quelle classe ils sont et comment ils sont différentes. [...] Contrairement aux noms à les racines de hiérarchies, de la sous-classe les noms ne sont pas utilisés aussi souvent dans conversation, de sorte qu'ils peuvent être expressif au prix de concis. [...]

Donner les sous-classes qui servent de les racines de hiérarchies de leur propre simple des noms. Par exemple, HotDraw a un classe Poignée qui présente la figure les opérations d'édition lorsqu'une figure est sélectionné. Il est appelé, tout simplement, Poignée en dépit de l'extension de la Figure. Il est toute une famille de poignées et ils la façon la plus appropriée ont des noms comme StretchyHandle et TransparencyHandle. Parce que la Poignée est la racine de ses propres la hiérarchie, elle mérite une simple le nom de la superclasse plus que qualifiée sous-classe nom.

Une autre ride dans sous-classe des noms à plusieurs niveaux les hiérarchies. [...] Plutôt que de aveuglément ajouter les modificateurs pour l'immédiat super-classe, pensez à le nom de le lecteur du point de vue. Quelle classe qu'il n'a besoin de savoir que cette classe est comme? Utilisez cette super-classe comme base pour la sous-classe nom."

Interface

Deux styles de nommage des interfaces dépend de la façon dont vous pensez de ces interfaces. Les Interfaces des classes sans implémentations devraient être nommé comme si elles étaient des classes (Simple Nom De La Superclasse, Qualifié De Sous-Classe Nom). Un problème avec ce style de les noms que les noms sont utilisés avant d'arriver à l'appellation des classes. Un interface appelée Fichier a besoin d'une mise en œuvre de la classe appelé quelque chose comme ActualFile, ConcreteFile, ou (beurk!) FileImpl (à la fois un suffixe et un l'abréviation). En général, la communication si on est dans un béton ou résumé de l'objet est important, si l'objet abstrait est mis en place comme un interface ou une classe mère est moins important. Report de la distinction entre les interfaces et les super-classes est bien >pris en charge par ce style de nommage, vous laissant libre de changer d'avis plus tard si c' >devient nécessaire.

Parfois, nommage des classes de béton n'est tout simplement plus important de la communication de masquage de l'utilisation des interfaces. Dans ce cas, le préfixe des noms d'interfaces avec "je". Si l' l'interface est appelée IFile, la classe peut être simplement appelé Fichier.

Pour une discussion plus détaillée, acheter le livre! Il vaut la peine! :)

39voto

Rob Cooper Points 15945

Toujours aller pour MyClassA, MyClassB - Il permet un agréable alpha de tri..

Je plaisante!

C'est une bonne question, et j'ai vécu quelque chose de pas trop longtemps. J'ai été la réorganisation de ma base de code au travail et a avoir des problèmes de où mettre quoi, et comment l'appeler..

Le réel problème?

J'ai eu des classes à en faire trop. Si vous essayez de respecter le principe de responsabilité unique , il fera tout ce qui viennent tous ensemble beaucoup plus agréable.. Plutôt que d'un monolithique PrintHandler la classe, vous pouvez le décomposer en PageHandler , PageFormatter (et ainsi de suite) et puis un maître de l'Imprimante de la classe qui rassemble toutes les informations.

Dans mon re-org, il m'a pris du temps, mais j'ai fini par binning beaucoup de code en double, j'ai mon code beaucoup plus logique et appris un enfer de beaucoup quand il s'agit de la réflexion avant de lancer une méthode supplémentaire dans une classe :D

Je voudrais pas toutefois recommandé de mettre les choses comme motif de noms dans le nom de la classe. Les classes de l'interface doit faire évidentes (comme cacher le constructeur pour un singleton). Il n'y a rien de mal avec le nom générique, si la classe est au service d'un générique de fin.

Bonne chance!

29voto

Josh Segall Points 1996

Josh Bloch excellent parler de la bonne conception d'API a quelques bons morceaux de conseils:

  • Les Classes doivent faire une chose et le faire bien.
  • Si une classe est difficile de nommer ou de l'expliquer, alors il n'est probablement pas en suivant les conseils de la puce précédente.
  • Un nom de classe doit communiquer instantanément ce que la classe est.
  • Bon les noms de disque de bonnes conceptions.

Si votre problème est quoi le nom exposés classes internes, vous devriez peut-être les regrouper dans une catégorie plus large.

Si votre problème est la dénomination d'une classe qui est en train de faire beaucoup de choses différentes, vous devez envisager de diviser en plusieurs classes.

Si c'est un bon conseil pour une API publique, alors il ne peut pas nuire de toute autre classe.

13voto

Simon Johnson Points 4641

Si vous êtes coincé avec un nom, parfois juste en lui donnant toutes les demi-nom judicieux avec engagement à réviser plus tard, il est une bonne stratégie.

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.

9voto

Luke Halliwell Points 4402

Si un nom ne fait pas le printemps à l'esprit, je serais probablement question de savoir si il y a un problème plus profond - c'est la classe de servir une bonne cause? Si elle l'est, de nommage, il devrait être assez simple.

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