Que veut dire oncle Bob par «noms de locutions nominales»?

14

Je lis Clean Code par Oncle Bob. Parce que je ne suis pas un locuteur natif anglais, je ne pouvais pas comprendre la déclaration suivante:

Les classes et les objets doivent avoir des noms de nom ou syntagme comme Customer, WikiPage, Accountet AddressParser. Évitez les mots comme Manager, Processor, Dataou Infoau nom d'une classe. Un nom de classe ne doit pas être un verbe.

Comme je sais, aucun des Manager, Processor, Dataet Infoest un verbe, est - ce pas? Quel est le véritable point sur lequel il souhaite insister?

mmdemirbas
la source
peut-être que l'oncle Bob adopte une pensée RESTful pour vanter les vertus des ressources en tant qu'objets.
rwong

Réponses:

21

Les trois points sont distincts:

  • Les noms de classe doivent être des noms ou des phrases nominales . Cela signifie que le nom de la classe devrait être quelque chose qui ferait l'objet d'un verbe. Dans le cas de la conception orientée objet, les méthodes seraient les verbes qui ont lieu sur la chose dont la classe est une représentation.

  • Certains mots doivent être évités. Managerindique une classe de dieu possible . Infoet Datapeut indiquer un conteneur de données factice. Des mots comme celui-ci peuvent indiquer une mauvaise modélisation de l'espace problématique.

  • Les verbes ne doivent jamais être des noms de classe. Voir le premier point - les classes modélisent les choses, les méthodes modélisent les actions.

Thomas Owens
la source
1
Des mots comme celui-ci peuvent indiquer une mauvaise modélisation de l'espace problématique. - Eh bien, on pourrait penser, que l'espace du problème est mal modélisé ou non, indépendamment des noms choisis. Un bon nom n'aide pas une mauvaise conception; et un bon design n'est que légèrement blessé par un mauvais nom.
Ingo
Et vous pourriez prendre cela un peu plus bas lorsque vous considérez comment vous construisez réellement votre classe et comment elle interagit avec le monde extérieur - les propriétés de la classe seraient généralement des noms, tandis que les méthodes de la classe seraient généralement des verbes
PeteH
Si votre projet a une classe que vous envisagez d'appeler "Manager" ou "Info" ou "Data", il a probablement une douzaine de ces classes, ce qui signifie que vous n'utiliseriez pas ces noms. Vous auriez un ThisManager et ThatManager et AnotherManger et ainsi de suite.
gnasher729
Il dit que les verbes ne devraient jamais être dans les noms de classe, mais je ne faisais que relire Ajouter un contexte significatif, et dans son exemple à la page 29, il nomme une classe GuessStatisticMessage. Maintenant, je suis confus sur la règle, car j'interprète son utilisation de Guess comme un verbe, par opposition à un nom. dictionary.com/browse/guess?s=t
Devin Gleason Lambert
2
@DevinGleasonLambert Mais ce n'est pas Guess. C'est un message statistique Guess. Un message est un substantif. Guess Statistic décrit simplement le type de message qu'il s'agit - un message qui concerne les statistiques de supposition.
Thomas Owens
7

Il essaie de faire une distinction entre les choses (noms) et les actions (verbes). Dans la conception conventionnelle orientée objet, nous considérons les classes comme des choses et leurs méthodes comme les actions que ces choses peuvent effectuer. Pour gérer est de prendre en charge ou coordonner, tout en gérant est une personne ou une chose qui gère.

Les livres d'introduction se résument généralement aux termes les plus simples et évidents possibles comme une classe nommée Dog , avec les méthodes Bark et Bite . Dans les classes du monde réel, la distinction est souvent un peu plus subtile, mais elle est toujours là. Je pense que l'argument de l'oncle Bob, cependant, est que même si manager est un nom, mais il met beaucoup d'attention sur ce que fait le manager, et non sur ce qu'il est - c'est trop vague d'un mot pour décrire exactement ce qui est être géré ou comment.

pswg
la source
5
Malheureusement, ce genre de réflexion peut conduire à des conceptions erronées. L'un des meilleurs exemples est l'exemple d'introduction classique d'un compte bancaire. Dans presque tous les manuels OO, Accountest un objet, balanceun champ et une transferméthode. Mais la conception correcte serait: Transferest un objet, accountest un champ et balanceest une méthode. C'est ainsi que les systèmes bancaires sont réellement mis en œuvre et comment les services bancaires fonctionnaient réellement avant les ordinateurs.
Jörg W Mittag
@ JörgWMittag: ce récit édifiant vaut la peine d'être publié comme réponse; que ce sont des directives générales, et peuvent dans certains cas rares conduire à une mauvaise décomposition.
smci