Vor kurzem stieß ich auf eine mäßig große Python Code - Basis mit vielen MyClassAbstractFactory
, MyClassManager
, MyClassProxy
, MyClassAdapter
usw. Klassen.
Diese Namen haben mich einerseits dazu bewogen, die entsprechenden Muster zu erforschen und zu lernen, aber sie waren nicht sehr beschreibend für das, was die Klasse tut .
Auch scheinen sie innerhalb der verbotenen Liste der Wörter in der Programmierung fallen: variable
, process_available_information
, data
, amount
, compute
: zu weit gefasste Namen, die nicht sagen uns nichts über die Funktion , wenn sie von sich selbst verwendet .
Sollte es also geben CommunicationManager
oder eher PortListener
? Oder verstehe ich das Problem vielleicht gar nicht ...?
design-patterns
naming
Vorac
quelle
quelle
Fctory
statt einFactory
, oder ist das nur ein Tippfehler?Antworten:
AbstractFactory
ist in der Tat eine schlechte Wahl für einen Namen. Es gibt keine Möglichkeit zu wissen, was von dieser Factory erstellt wird , und wenn Sie nach einer Entität suchen, dieAnimal
s erstellt , werden Sie die entsprechende Factory niemals anhand des Namens finden.AnimalAbstractFactory
ist auch keine kluge Wahl, da es in den meisten Sprachen mit dem Schlüsselwort in der Signatur überflüssig wäreabstract
.Abgesehen davon gibt es mehrere gute Gründe, die in den Kommentaren hervorgehoben werden, um tatsächlich
Abstract
in den Namen aufgenommen zu werden: Es gibt nicht nur mehrere Kontexte, in denen Sie nicht die vollständige Signatur haben, sondern nur den Namen, sondern auch die BeibehaltungAnimalFactory
einer Schnittstelle kann eine kluge Wahl sein (es sei denn, die Konvention der Sprache / des Frameworks besteht leider darin, Schnittstellen mit einem Präfix zu versehenI
).AnimalCreationUtility
Eine schlechte Wahl wäre auch: Wenn es sich um eine Fabrik handelt , machen Sie es den Leuten leichter, die Code lesen, und nennen Sie es eine Fabrik .abstract AnimalFactory
ist in Ordnung. Es muss nicht Redundanz und ist klar , dass es ist eine abstrakte Fabrik , die Delegierten die Schaffung von Tieren zu ihren Kindern.Ja, es ist eine gute Idee, den Namen des Entwurfsmusters anzugeben, aber er sollte nur ein Teil des Namens sein und nicht mit den anderen Teilen der Signatur überflüssig sein.
quelle
Kommt auf das konkrete Beispiel an. Das Builder-Muster eignet sich fast immer am besten für die Benennung Ihres Class * Builder, während ein Singleton normalerweise nicht als solches benannt werden muss.
Wenn Sie den Musternamen nicht in Ihren Klassennamen einfügen, und vielleicht auch, wenn Sie dies tun, sollten Sie in der Regel einen Kommentar in die Klasse einfügen, der erklärt, dass sie ein bestimmtes Muster implementiert.
quelle
...Factory
, wird es zu einer geistigen Belastung, zu erkennen, dass eine Klasse eine Fabrik ist, wenn ihre Bezeichnung gegen diese Konvention verstößt.Der Sinn der Verwendung von Musternamen in Klassen besteht darin, die Funktionsweise der Klasse verständlich zu machen. Wenn Sie die Klasse AnimalFactory benennen, ist es offensichtlich, dass die Klasse Animal-Instanzen erstellt. Wenn der Name Ihrer Klasse einen Namen eines Musters enthält und nicht beschreibt, was es tut, haben Sie entweder ein falsches Muster ausgewählt oder es falsch implementiert.
quelle
Ich denke, es kann sehr gut funktionieren. Beispielsweise:
quelle