Vor langer Zeit habe ich einen Artikel gelesen (ich glaube ein Blogeintrag), der mich auf die "richtige" Spur beim Benennen von Objekten gebracht hat: Seien Sie sehr, sehr gewissenhaft beim Benennen von Dingen in Ihrem Programm.
Wenn meine Anwendung beispielsweise (als typische Geschäftsanwendung) Benutzer, Unternehmen und Adressen handhaben würde, hätte ich eine User
, eine Company
und eine Address
Domänenklasse - und wahrscheinlich würde irgendwo ein UserManager
, ein CompanyManager
und ein AddressManager
auftauchen, das diese Dinge behandelt.
So kann man sagen , was diejenigen UserManager
, CompanyManager
und AddressManager
tun? Nein, denn Manager ist ein sehr allgemeiner Begriff, der zu allem passt, was Sie mit Ihren Domänenobjekten tun können.
In dem Artikel, den ich gelesen habe, wurde empfohlen, sehr spezifische Namen zu verwenden. Wenn es sich um eine C ++ - Anwendung handelte und der UserManager
Job darin bestand, Benutzer zuzuweisen und vom Heap zu befreien, würde er die Benutzer nicht verwalten, sondern ihre Geburt und ihren Tod schützen. Hmm, vielleicht könnten wir das a nennen UserShepherd
.
Oder vielleicht besteht die UserManager
Aufgabe darin, die Daten jedes Benutzerobjekts zu untersuchen und die Daten kryptografisch zu signieren. Dann hätten wir eine UserRecordsClerk
.
Jetzt, wo diese Idee bei mir geblieben ist, versuche ich sie anzuwenden. Und finde diese einfache Idee erstaunlich schwer.
Ich kann beschreiben, was die Klassen tun, und (solange ich nicht in die schnelle und schmutzige Codierung schlüpfe) die Klassen, die ich schreibe, genau eines tun. Was ich vermisse, um von dieser Beschreibung zu den Namen zu gelangen, ist eine Art Katalog von Namen, ein Vokabular, das die Konzepte Namen zuordnet.
Letztendlich möchte ich so etwas wie einen Musterkatalog im Kopf haben (häufig liefern Entwurfsmuster leicht die Objektnamen, z. B. eine Fabrik ).
- Factory - Erstellt andere Objekte (Benennung aus dem Entwurfsmuster)
- Hirte - Ein Hirte kümmert sich um die Lebensdauer von Objekten, deren Entstehung und Abschaltung
- Synchronizer - Kopiert Daten zwischen zwei oder mehr Objekten (oder Objekthierarchien).
Kindermädchen - Hilft Objekten, nach der Erstellung den Status "verwendbar" zu erreichen - beispielsweise durch Verkabelung mit anderen Objekten
etc etc. etc.
Wie gehen Sie mit diesem Problem um? Haben Sie einen festen Wortschatz, erfinden Sie spontan neue Namen oder denken Sie darüber nach, Dinge zu benennen, die nicht so wichtig oder falsch sind?
PS: Ich interessiere mich auch für Links zu Artikeln und Blogs, die das Problem diskutieren. Hier ist zunächst der ursprüngliche Artikel, über den ich nachgedacht habe: Benennen von Java-Klassen ohne 'Manager'
Update: Zusammenfassung der Antworten
Hier ist eine kleine Zusammenfassung dessen, was ich in der Zwischenzeit aus dieser Frage gelernt habe.
- Versuche keine neuen Metaphern zu erstellen (Nanny)
- Schauen Sie sich an, was andere Frameworks tun
Weitere Artikel / Bücher zu diesem Thema:
- Welche Namen stellen Sie regelmäßig vor / an den Unterricht?
- Was ist der beste Ansatz, um Klassen zu benennen?
- Buch: Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software (Hardcover)
- Buch: Muster der Architektur von Unternehmensanwendungen (Hardcover)
- Buch: Implementierungsmuster (Taschenbuch)
Und eine aktuelle Liste von Namenspräfixen / -suffixen, die ich (subjektiv!) Aus den Antworten gesammelt habe:
- Koordinator
- Baumeister
- Schriftsteller
- Leser
- Handler
- Container
- Protokoll
- Ziel
- Konverter
- Regler
- Aussicht
- Fabrik
- Entität
- Eimer
Und ein guter Tipp für die Straße:
Keine Namenslähmung. Ja, Namen sind sehr wichtig, aber sie sind nicht wichtig genug, um viel Zeit damit zu verschwenden. Wenn Sie sich in 10 Minuten keinen guten Namen ausdenken können, fahren Sie fort.