Nommer les classes devient débilitant [fermé]

9

Je ne sais pas s'il s'agit d'un trait OCD ou non, mais je trouve que parfois je suis complètement bloqué, incapable de continuer ce que je fais lorsque je nomme une classe (ou une fonction, ou un espace de noms, etc.) que je crois être utilisée à l'extérieur d'un projet donné. Une API par exemple. Ou une bibliothèque de classes utilitaires.

Si le nom n'est pas exactement correct (dans mon esprit), je ne peux tout simplement pas continuer ... Je suis coincé à essayer de trouver le bon nom. J'ai essayé d'écrire de petites applications qui l'utiliseraient pour voir à quoi ressemblent les noms, mais cela ne semble pas aider ...

Je sais que cela ne devrait pas avoir d'importance, et c'est contre tout état d'esprit de programmation de supposer que vous l'auriez parfait au premier coup d'œil ... Je me sens simplement impuissant ...

Tous les conseils / idées seraient grandement appréciés ...

davidsleeps
la source
3
D'après mon expérience, une fois que vous avez finalisé le corps de la classe, remanié etc., alors le nom de la classe et les méthodes commencent à tomber à leur place.
Job
11
Citation obligatoire: "Il n'y a que deux problèmes difficiles en informatique: l'invalidation du cache et les choses de nommage." - Phil Karlton
Macke
Sentiment familier. N'abandonnez pas, ne commencez pas à nommer les choses "Common", "Utilities", "Managers" et "Helpers". :)
Arnis Lapsa

Réponses:

10

À mon avis, le problème que vous rencontrez n'est pas seulement de trouver une meilleure façon de trouver de bons noms, mais de faire face à la contrainte de le faire. Si je suis honnête, je reconnais un trait similaire en moi. Les noms sont importants, après tout, et j'aime bien les concepts sur lesquels je travaille. Cependant, ce n'est pas toujours la chose la plus importante.

Voici quelques-unes des méthodes que j'utilise pour surmonter ce genre de chose:

  1. Reconnaissez qu'il n'y a pas de solution parfaite, seulement des solutions meilleures que d'autres.
  2. Mettez les premières choses en premier. Il est plus important de terminer une affectation de programmation que de le faire parfaitement.
  3. Demandez à d'autres personnes. Nous avons tous nos zones où nous nous enlisons, mais heureusement, différentes personnes s'enlisent dans des endroits différents. Peut-être que quelqu'un d'autre trouvera un bon nom, ou vous dira que cela n'a pas vraiment d'importance.
  4. Fixez un délai. Donnez-vous x minutes pour faire ce qui vous attend, puis passez à autre chose.
  5. Promettez-vous que vous reviendrez plus tard. Gardez un journal des choses que vous souhaitez revenir. Beaucoup de ces types de problèmes deviennent plus clairs lorsque vous les laissez tranquilles un peu. Soit vous trouverez un meilleur nom plus tard, soit vous reconnaîtrez que cela n'a pas vraiment d'importance.
  6. Reconnaissez que dans 100 ans, personne ne s'en souciera de toute façon.
  7. Faites le contraire. Donnez une mauvaise réputation à une classe et voyez ce qui se passe. Cela confirmera la nécessité de consacrer du temps à de meilleurs noms ou vous montrera à quel point cela compte vraiment peu. En outre, cela vous aidera à sortir de l'état d'esprit obsessionnel.
  8. Prier. Cela fonctionne souvent pour moi.
  9. Valorisez-vous indépendamment de ce que vous faites. Éloignez-vous de l'idée que votre propre valeur vient de la prestation de la perfection. Lorsque nous reconnaissons que nous avons une valeur intrinsèque, indépendamment de nos emplois, nous ressentons moins de honte lorsque nous ne sommes pas à la hauteur de nos propres normes.
  10. Créez de nouveaux mots et utilisez-les pour nommer vos classes, ou tout simplement redéfinir les anciens. La programmation est un processus créatif, et parfois les idées que nous capturons sont de nouvelles idées. Les nouvelles idées ont besoin de nouveaux noms. "EmployeeTransmogrifier" est un nom parfaitement valide pour une classe.
  11. Considérez que vous essayez de résoudre le mauvais problème. Par exemple, ce n'est pas une bonne idée d'écrire une API sans avoir une idée très claire des besoins de l'appelant. Si vous résolvez ce problème, votre problème de dénomination pourrait être beaucoup plus facile.
  12. Déjeuner. Le déjeuner est toujours bon.
Kramii
la source
4
+1 pour le déjeuner. Beaucoup de gens n'accordent pas assez de valeur à penser à autre chose pour résoudre un problème.
unholysampler
Quelques points
intéressants
5

d'abord

Posez-vous la question "quel est le seul but de cette classe?". Sans adhérer au principe de responsabilité unique, il est très difficile de nommer les classes et les méthodes. Si vous ne pouvez pas répondre à cette question, vous devrez peut-être repenser ce que vous voulez que la classe fasse et envisager de séparer les préoccupations. Il sera ainsi plus facile de nommer

Deuxièmement

Avez-vous un modèle pour nommer vos classes? Essayez peut-être d'examiner certains modèles de dénomination courants, par exemple le modèle, qui devient beaucoup plus facile à suivre une fois que vous avez abordé SRP ci-dessus. Votre classe analyse-t-elle XML? Essayez XMLParser. Analyse-t-il XML, crée-t-il des modèles de domaine pour représenter l'entrée, les conserve-t-il dans la base de données, puis publie-t-il un message de réussite sur Twitter? Essayez de refactoring.

Troisièmement

Je comprends d'où vous venez et avez déjà vécu une situation similaire. Essayez peut-être d'étoffer votre classe avec quelques fonctionnalités, avec un nom temporaire pour commencer. Avec n'importe quel bon IDE ou assistant de refactoring, renommer la classe devrait être une action en un clic, donc ce que vous nommez votre classe au départ n'a pas besoin d'être permanent! Cela vous aidera à surmonter votre bloc OCD et donnera à votre subconscient le temps de le traiter un peu plus loin.


Enfin et légèrement hors sujet

J'ai eu un moment d'ampoule dans un travail que je faisais l'autre jour, implémentant un système non critique, et je passais un bon moment à jouer avec différents noms de classes, etc. classes en fonction de leur exécution spécifique ... Par exemple, vous pourriez être tenté d'avoir IXMLParser et XMLParser, mais que se passe-t-il lorsque votre entrée passe à JSON? Essayez plutôt IInputParser, de cette façon, vous pouvez créer des classes concrètes XMLParser et JSONParser qui implémentent toutes deux IInputParser de différentes manières.

mjhilton
la source
Oui, j'ai aussi eu ce genre de moment ... le problème est que vous vous débrouillez très bien et que vous ne pouvez jamais simplement écrire le code prévu, trois est toujours une disposition de l'abstraction ...
Robin Vessey
1

Pour moi, c'est généralement un signe que le design n'est pas clair dans mon esprit, donc je me fais un nom, et je me donne un temps (disons 2 minutes) pour en trouver un meilleur, à la fin de ce temps, je dois utilisez celui que j'ai trouvé en premier. Barney, Wilma et Fred sont les favoris pour commencer. Je fais des choses comme "BarniesInputParser" Les noms sont si mauvais que je dois en trouver un meilleur ou les changer plus tard. Ils sont également si mauvais qu'ils sont uniques, ce qui rend la refactorisation triviale et sûre, et quiconque regarde le code incomplet peut voir instantanément qu'il est incomplet.

L'important est que pendant que vous n'ajoutez pas de fonctionnalité, vous ne donnez à votre cerveau aucune nouvelle information à utiliser pour définir le nom (et clarifier la conception). Tout ce que vous faites, c'est régurgiter la même entrée de différentes manières.

Ou allez faire un café. Avant d'arriver à la machine, vous l'avez ...

mattnz
la source
effroyablement, je connais des logiciels livrés qui ont été nommés de cette façon ... imaginez essayer d'expliquer cela 5 ans plus tard alors que vous êtes le seul de l'entreprise à savoir qui est "Tim".
Yaur
0

Je l'ai reçu d'un ami il y a quelque temps. Écrivez ce que votre processus est censé faire. Juste un petit récit. Ensuite, prenez les noms et transformez-les en classes, les verbes en méthodes et les adverbes en propriétés.

éviter le travail
la source
Il s'agit d'un simple exercice de type CS101 pour enseigner OOAD . Cependant, il échoue dans tout système réel qui n'est pas conçu par un professeur ou un auteur de manuel.