Récemment , je suis tombé sur une base de code python modérément large avec beaucoup de MyClassAbstractFactory
, MyClassManager
, MyClassProxy
, MyClassAdapter
etc. classes.
Alors que d'une part ces noms m'a fait faire des recherches et d' apprendre les modèles correspondants, ils ne sont pas très descriptif de ce que la classe ne .
, Ils semblent aussi tomber dans la liste des mots interdits dans la programmation: variable
, process_available_information
, data
, amount
, compute
: noms trop larges, qui ne nous disent rien sur la fonction lorsqu'ils sont utilisés par eux - mêmes .
Alors devrait-il y en avoir CommunicationManager
ou plutôt PortListener
? Ou peut-être que je ne comprends pas du tout le problème ...?
design-patterns
naming
Vorac
la source
la source
Fctory
au lieu d'unFactory
, ou est-ce juste une faute de frappe?Réponses:
AbstractFactory
est en effet un mauvais choix pour un nom. Il n'y a aucun moyen de savoir ce qui est créé par cette usine , et lorsque vous recherchez une entité qui créeAnimal
s, vous ne trouverez jamais l'usine correspondante par son nom.AnimalAbstractFactory
n'est pas non plus un choix judicieux, car dans la plupart des langues, il serait redondant avec leabstract
mot - clé dans la signature.Cela étant dit, il y a plusieurs bonnes raisons, soulignées par les commentaires, d'inclure réellement
Abstract
dans le nom: non seulement il y a plusieurs contextes où vous n'avez pas la signature complète, mais juste le nom, mais aussi, en gardantAnimalFactory
une interface peut être un choix judicieux (sauf si, malheureusement, la convention du langage / framework est de préfixer les interfaces avecI
).AnimalCreationUtility
serait également un mauvais choix: s'il s'agit d'une usine , rendez les choses plus faciles pour les personnes qui liront le code et l' appelleront une usine .abstract AnimalFactory
est ok. Il ne dispose pas de redondance, et il est clair que c'est une abstraite usine qui délègue la création d'animaux à ses enfants.Alors oui, inclure le nom du motif de conception est une bonne idée, mais cela ne devrait être qu'une partie du nom et ne devrait pas être redondant avec les autres parties de la signature.
la source
Dépend de l'exemple spécifique. Le modèle Builder est presque toujours mieux servi en nommant votre classe * Builder, alors qu'un Singleton n'a généralement pas besoin d'être nommé comme tel.
Si vous ne mettez pas le nom du modèle dans le nom de votre classe, et peut-être même si vous le faites, vous devriez généralement mettre un commentaire dans la classe qui explique qu'il implémente un modèle spécifique.
la source
...Factory
, il devient assez difficile de réaliser qu'une classe est une usine si son nom rompt cette convention.L'intérêt de l'utilisation des noms de modèle dans les classes est de faciliter la compréhension de ce que fait la classe. Si vous nommez la classe AnimalFactory, il est évident que la classe crée des instances Animal. Si le nom de votre classe comprend le nom d'un modèle et qu'il ne décrit pas ce qu'il fait, vous avez soit choisi un mauvais modèle, soit l'implémenté incorrectement.
la source
Je pense que cela peut très bien fonctionner. Par exemple:
la source