Findet sonst noch jemand das Benennen von Klassen und Methoden als einen der schwierigsten Teile der Programmierung? [geschlossen]

275

Ich arbeite an dieser Klasse, die über einen Webdienst Hilfedokumentation von einem Anbieter anfordern soll. Ich versuche , es zu nennen DocumentRetriever, VendorDocRequester, DocGetter, aber sie klingen einfach nicht richtig. Am Ende habe ich eine halbe Stunde lang auf dictionary.com gestöbert und versucht, ein passendes Wort zu finden.

Das Programmieren mit schlechten Namen ist wie ein sehr schlechter Tag am Morgen, der Rest des Tages geht von dort aus bergab. Fühle mich?

Haoest
quelle
2
Warum sollten Sie eine Klasse wollen, wenn Sie eindeutig nur eine Funktion benötigen? Stellen Sie sicher, dass Sie unter steve-yegge.blogspot.com/2006/03/… nach dem Verb als Klassennamenproblem suchen .
user51568
Oder gehen Sie vorwärts und überarbeiten Sie, wenn Sie endlich wissen, wie es heißen soll.
Esteban Araya
16
Was benennen Sie?: Methoden : Verwenden Sie Verben wie get, set, save usw. Klassen und Variablen : Verwenden Sie Substantive wie Dokument, Benutzer, Kontext usw. Schnittstellen : Verwenden Sie Adjektive wie printable, clonable, iterable usw. Nachdem ich diesen Thread gelesen habe, mag ich Spolskys Vorschlag für Klassen und Variablen (es verwendet Substantive) und TravisOs Vorschlag für Methoden (es verwendet Verben). Auch machen Sie keine Gegenstände , dass Ende mit ‚er‘ .
Daniel Gasull
5
"In der Informatik gibt es zwei schwierige Probleme: Cache-Ungültigmachung, Namenskonventionen und stiller Überlauf."
Karakuri
6
@karakuri Die Version, die ich gehört habe, ist "es gibt 2 schwierige Probleme in der Informatik: Benennung und Versatz um 1 Fehler."
Haoest

Antworten:

121

Was Sie jetzt tun, ist in Ordnung, und ich empfehle Ihnen dringend, sich an Ihre aktuelle Syntax zu halten:

Kontext + Verb + wie

Ich verwende diese Methode, um Funktionen / Methoden, gespeicherte SQL-Prozesse usw. zu benennen. Wenn Sie diese Syntax einhalten, bleiben Ihre Intellisense- / Codefenster viel ordentlicher. Sie möchten also EmployeeGetByID () EmployeeAdd (), EmployeeDeleteByID (). Wenn Sie eine grammatikalisch korrektere Syntax wie GetEmployee () und AddEmployee () verwenden, werden Sie feststellen, dass dies sehr unübersichtlich wird, wenn Sie mehrere Gets in derselben Klasse haben, da nicht verwandte Dinge zusammen gruppiert werden.

Ich vergleiche dies mit dem Benennen von Dateien mit Datumsangaben. Sie möchten sagen, 2009-01-07.log nicht 1-7-2009.log, da die Reihenfolge nach einer Reihe von Dateien völlig unbrauchbar wird.

TravisO
quelle
28
Ich bevorzuge es, wenn beim Benennen von Methoden der Kontext aus dem Typnamen abgeleitet wird ... class EmployeeRepository {void Add (Employee employee); void Get (int id); void GetAll (); void GetAll (Action <FilterCriteria> -Filter); } Was denken Sie?
Vyas Bharghava
5
Hilft auch, wenn Sie eine Standardliste von "Haus" -Verben haben. Es ist also immer Get and not Load / Read / Retrieve / Select / Find .... etc.
Dead Account
2
Richard, Sie haben in OOP-Szenarien Recht, meine Antwort hat sich etwas zurückgezogen und war eher ein allgemeiner Codierungsvorschlag. Ich denke, technisch gilt dies eher für Nicht-OOP-Sprachen. Employee.Add () und Employee.GetByID () sind die beste Verwendung in OOP.
TravisO
6
Ich mag den Intellisense-Effekt Ihres Vorschlags, aber ich bevorzuge einen Ansatz, der etwas besser ist. Also würde ich Employee.SetSupervisor () gegenüber Employee.SupervisorSet () vorziehen, weil es liest (eher wie natürliches Englisch.
Matthew Maravillas
12
Aber @TravisO, das klingt auf Englisch nicht gut. Sie bekommen keinen Mitarbeiter, Sie bekommen einen Mitarbeiter. Was ist, wenn Sie komplexere Aktionen mit Adjektiven haben, wie z InvalidateObsoleteQueries. QueriesInvalidateObsoleteist schwer zu lesen und macht keinen Sinn. Außerdem ist in C #, insbesondere bei Resharper, die alphabetische Reihenfolge irrelevant. Wenn Sie mit der Eingabe „emp“ starten, wird ReSharper geben Sie GetEmployee, SetEmployeeund sogar PopulateInactiveEmployeesList.
Ilya Kogan
54

Eine Lektion, die ich gelernt habe, ist, dass, wenn Sie keinen Namen für eine Klasse finden, fast immer etwas mit dieser Klasse nicht stimmt:

  • du brauchst es nicht
  • es macht zu viel
Toon Krijthe
quelle
13
Oder es macht zu wenig.
user51568
4
Danke, das war eigentlich relevant für mich.
Haoest
52

Eine gute Namenskonvention sollte die Anzahl möglicher Namen minimieren, die Sie für eine bestimmte Variable, Klasse, Methode oder Funktion verwenden können. Wenn es nur einen möglichen Namen gibt, werden Sie nie Probleme haben, sich daran zu erinnern.

Für Funktionen und für Singleton-Klassen überprüfe ich die Funktion, um festzustellen, ob ihre Grundfunktion darin besteht, eine Art von Dingen in eine andere Art von Dingen umzuwandeln . Ich verwende diesen Begriff sehr locker, aber Sie werden feststellen, dass eine RIESIGE Anzahl von Funktionen, die Sie schreiben, im Wesentlichen etwas in einer Form annehmen und etwas in einer anderen Form produzieren.

In Ihrem Fall klingt es so, als würde Ihre Klasse eine URL in ein Dokument umwandeln . Es ist ein bisschen komisch, es so zu sehen, aber vollkommen richtig, und wenn Sie anfangen, nach diesem Muster zu suchen, werden Sie es überall sehen.

Wenn ich dieses Muster finde, benenne ich immer die Funktion x Fromy .

Da Ihre Funktion eine URL in ein Dokument umwandelt , würde ich sie benennen

DocumentFromUrl

Dieses Muster ist bemerkenswert häufig. Beispielsweise:

atoi -> IntFromString
GetWindowWidth -> WidthInPixelsFromHwnd // or DxFromWnd if you like Hungarian
CreateProcess -> ProcessFromCommandLine

Sie können auch verwenden, UrlToDocumentwenn Sie mit dieser Bestellung besser vertraut sind. Ob Sie x Fromy oder y Tox sagen, ist wahrscheinlich Geschmackssache, aber ich bevorzuge die FromReihenfolge, da auf diese Weise der Anfang des Funktionsnamens bereits angibt, welchen Typ er zurückgibt.

Wählen Sie eine Konvention und halten Sie sich daran. Wenn Sie darauf achten, in Ihren x Fromy -Funktionen dieselben Namen wie Ihre Klassennamen zu verwenden , ist es viel einfacher, sich zu merken, welche Namen Sie verwendet haben. Natürlich funktioniert dieses Muster nicht für alles, aber es funktioniert dort, wo Sie Code schreiben, der als "funktional" angesehen werden kann.

Joel Spolsky
quelle
Eine nette Erinnerung daran, dass Klassennamen in OOP-Sprachen nicht immer Substantive sein müssen, aber es ist in Ordnung, dass sie gelegentlich "verbal" sind. Daher werden OOP-Praktizierende oft gestolpert (wie die Person, die die Frage stellt), da zu viel betont wird, dass der Unterricht in der realen Welt ein "Ding" sein muss.
Ray
7
Die xFromY-Convetion wiederholt grundsätzlich, was in der Rückgabetyp- und Parameterliste enthalten ist: Foo fooFromBar (Balkenleiste). Es liegt an Ihnen, ob Sie diese Konsistenz oder Redendanz nennen.
Lena Schimmel
"In Ihrem Fall klingt es so, als würde Ihre Klasse eine URL in ein Dokument umwandeln." Seit wann sollen Klassen Dinge "tun", anstatt Konzepte darzustellen?
user51568
6
@Brian: Es ist nur an einer Stelle überflüssig ... bei der Deklaration. Überall, wo Sie es verwenden, ist es schön, sich ein wenig an die Datentypen zu erinnern. Verbessert die Lesbarkeit des Codes, ohne dass Sie zur Deklaration zurückkehren müssen.
Joel Spolsky
3
@ stefan- In einigen Sprachen wie C # und Java muss der gesamte Code in einer Klasse gekapselt sein, die sich von C ++ unterscheidet. Funktionen sind in diesen Sprachen keine Bürger erster Klasse, wenn Sie Code modularisieren möchten. Daher kommt es manchmal zu einer Klasse, die Dinge wie eine Funktion "erledigt".
Ray
30

Manchmal gibt es keinen guten Namen für eine Klasse oder Methode, das passiert uns allen. Oft kann jedoch die Unfähigkeit, einen Namen zu finden, ein Hinweis darauf sein, dass etwas mit Ihrem Design nicht stimmt. Hat Ihre Methode zu viele Verantwortlichkeiten? Enthält Ihre Klasse eine zusammenhängende Idee?

Brad Barker
quelle
3
Sehr guter Punkt, wirklich.
Camilo Martin
27

Thread 1:

function programming_job(){
    while (i make classes){
         Give each class a name quickly; always fairly long and descriptive.
         Implement and test each class to see what they really are. 
         while (not satisfied){
            Re-visit each class and make small adjustments 
         }
    }
}

Thread 2:

while(true){
      if (any code smells bad){
           rework, rename until at least somewhat better
      }
}

Hier gibt es keinen Thread.sleep (...).

Krosenvold
quelle
24

Ich verbringe auch viel Zeit damit, mir Gedanken über die Namen von Dingen zu machen, denen beim Programmieren ein Name gegeben werden kann. Ich würde sagen, es zahlt sich sehr gut aus. Manchmal, wenn ich feststecke, lasse ich es für eine Weile und während einer Kaffeepause frage ich ein bisschen herum, ob jemand einen guten Vorschlag hat.

Für deine Klasse würde ich vorschlagen VendorHelpDocRequester.

willcodejavaforfood
quelle
1
> VendorHelpDocRequester Gut. Ich habe eher Requestor als Requester gegoogelt, beide scheinen legitime englische Wörter zu sein.
Haoest
1
Ich habe das auch ein- oder zweimal gemacht :)
willcodejavaforfood
1
Ein Verb im Klassennamen zu haben, klingt für mich immer falsch. Außerdem führt dies immer zu Doppelarbeit in der Verwendung (dh :) VendorHelpDocRequester.request(). Ich würde nur die Pluralform wie "VendorHelpDocs.request ()" bevorzugen
Edson Medina
19

Das Buch Code Complete von Steve Mcconnell enthält ein schönes Kapitel zum Benennen von Variablen / Klassen / Funktionen / ...

Emile Vrijdags
quelle
das ist eines meiner Lieblingsbücher, kann es nur empfehlen
willcodejavaforfood
2
+1 für alle, die jemals Code Complete erwähnen!
Richard Ev
15

Ich denke, das ist ein Nebeneffekt.

Es ist nicht die eigentliche Benennung, die schwierig ist. Was schwierig ist, ist, dass der Prozess des Namensgebens Sie vor die schreckliche Tatsache stellt, dass Sie keine Ahnung haben, was zum Teufel Sie tun.

Nosredna
quelle
12

Ich habe dieses Zitat gestern über den Blog Signal vs. Noise bei 37Signals gehört und bin damit einverstanden:

"In der Informatik gibt es nur zwei schwierige Dinge: die Ungültigmachung des Caches und das Benennen von Dingen." - Phil Karlton

Jonathan Schuster
quelle
simonwillison.net/2007/Jul/5/hard führte mich zu tbray.org/ongoing/When/200x/2005/12/23/UPI , was mich zu karlton.hamilton.com und weiter zu karlton.hamilton.com/quotes führte /showallquotes.cgi , das das Zitat nicht enthält! (Aber ich erkenne # 5 von Scrum.)
Daryl Spitzer
1
"Zwei schwierige Dinge in der Informatik: Cache-Ungültigmachung, Benennung und Fehler nacheinander."
Dan Lugg
7

Es ist gut, dass es schwierig ist. Es zwingt Sie, über das Problem nachzudenken und darüber, was die Klasse eigentlich tun soll. Gute Namen können zu gutem Design führen.

JW.
quelle
6

Einverstanden. Ich mag es, meine Typnamen und Variablen so beschreibend wie möglich zu halten, ohne zu schrecklich lang zu sein, aber manchmal gibt es nur ein bestimmtes Konzept, für das man kein gutes Wort findet.

In diesem Fall hilft es mir immer, einen Kollegen um Eingabe zu bitten - auch wenn er letztendlich nicht hilft, hilft es mir normalerweise, es zumindest laut zu erklären und meine Räder zum Drehen zu bringen.

Daniel Schaffer
quelle
6

Ich habe letzten Monat gerade über Namenskonventionen geschrieben: http://caseysoftware.com/blog/useful-naming-conventions

Das Wesentliche davon:

verbAdjectiveNounStructure - mit Struktur und Adjektiv als optionalen Teilen

Bei Verben halte ich mich an Aktionsverben: Speichern, Löschen, Benachrichtigen, Aktualisieren oder Generieren. Hin und wieder verwende ich "Prozess", aber nur, um speziell auf Warteschlangen oder Arbeitsrückstände zu verweisen.

Für Substantive verwende ich die Klasse oder das Objekt, mit dem / dem interagiert wird. In web2project sind dies häufig Aufgaben oder Projekte. Wenn es sich um Javascript handelt, das mit der Seite interagiert, kann es sich um einen Text oder eine Tabelle handeln. Der Punkt ist, dass der Code das Objekt, mit dem er interagiert, klar beschreibt.

Die Struktur ist optional, da sie für die jeweilige Situation einzigartig ist. Ein Listenbildschirm fordert möglicherweise eine Liste oder ein Array an. Eine der Kernfunktionen, die in der Projektliste für web2project verwendet werden, ist einfach getProjectList. Die zugrunde liegenden Daten werden nicht geändert, sondern nur die Darstellung der Daten.

Die Adjektive sind etwas ganz anderes. Sie werden als Modifikatoren für das Substantiv verwendet. Etwas so Einfaches wie getOpenProjects kann leicht mit einem getProjects und einem switch-Parameter implementiert werden. Dies führt jedoch dazu, dass Methoden generiert werden, die ein gutes Verständnis der zugrunde liegenden Daten und / oder der Struktur des Objekts erfordern ... nicht unbedingt etwas, das Sie möchten ermutigen. Durch explizitere und spezifischere Funktionen können Sie die Implementierung vollständig umschließen und vor dem Code verbergen, der sie verwendet. Ist das nicht einer der Punkte von OO?

CaseySoftware
quelle
4

Mehr als nur eine Klasse zu benennen, kann das Erstellen einer geeigneten Paketstruktur eine schwierige, aber lohnende Herausforderung sein. Sie müssen in Betracht ziehen, die Belange Ihrer Module und ihre Beziehung zur Vision der Anwendung zu trennen.

Betrachten Sie jetzt das Layout Ihrer App:

  • App
    • VendorDocRequester (vom Webdienst lesen und Daten bereitstellen)
    • VendorDocViewer (Verwenden Sie den Anforderer, um Herstellerdokumente bereitzustellen.)

Ich wage zu vermuten, dass in einigen Klassen viel los ist. Wenn Sie dies in einen MVC-orientierten Ansatz umgestalten und kleinen Klassen erlauben, einzelne Aufgaben zu erledigen, könnten Sie am Ende Folgendes haben:

  • App
    • VendorDocs
      • Modell
        • Dokument (einfaches Objekt, das Daten enthält)
        • WebServiceConsumer (Umgang mit Kleinigkeiten im Webdienst)
      • Regler
        • DatabaseAdapter (Behandlung der Persistenz mit ORM oder einer anderen Methode)
        • WebServiceAdapter (Verwenden Sie Consumer, um ein Dokument abzurufen und in die Datenbank zu kopieren.)
      • Aussicht
        • HelpViewer (verwenden Sie DBAdapter, um die Dokumentation auszuspucken)

Dann stützen sich Ihre Klassennamen auf den Namespace, um den vollständigen Kontext bereitzustellen. Die Klassen selbst können inhärent mit der Anwendung verknüpft sein, ohne dass dies explizit angegeben werden muss. Klassennamen sind dadurch einfacher und leichter zu definieren!

Ein weiterer sehr wichtiger Vorschlag: Bitte tun Sie sich selbst einen Gefallen und holen Sie sich eine Kopie von Head First Design Patterns. Es ist ein fantastisches, einfach zu lesendes Buch, mit dem Sie Ihre Anwendung organisieren und besseren Code schreiben können. Das Erkennen von Entwurfsmustern hilft Ihnen zu verstehen, dass viele der aufgetretenen Probleme bereits gelöst wurden, und Sie können die Lösungen in Ihren Code integrieren.

Mike Griffith
quelle
4

Leo Brodie schrieb in seinem Buch "Thinking Forth", dass die schwierigste Aufgabe für einen Programmierer darin bestehe, die Dinge gut zu benennen, und er erklärte, dass das wichtigste Programmierwerkzeug ein Thesaurus sei.

Versuchen Sie es mit dem Thesaurus unter http://thesaurus.reference.com/ .

Verwenden Sie darüber hinaus NIEMALS die ungarische Notation, vermeiden Sie Abkürzungen und seien Sie konsistent.

Die besten Wünsche.

Rob Williams
quelle
1
+1 mit dem Hinweis, dass Sie nicht das ungarische System verwenden sollten; App Ungarisch kann manchmal hilfreich sein, insbesondere in einer Programmiersprache ohne ein gutes Schreibsystem.
user51568
Ich habe noch nie von ungarischer System- oder Anwendungsnotation gehört, aber es ist in keiner Umgebung eine gute Idee - Sie sollten immer basierend auf WAS, nicht WIE benennen, und bei Ungarisch geht es ausschließlich darum, wie.
Rob Williams
@ RobWilliams Ich denke, sie bezogen sich auf Joel Spolskys Artikel
Alois Mahdal
1
@RobWilliams Bist du dir auch sicher über "Ich habe noch nie von X gegen Y gehört, aber es ist auch nie eine gute Idee ..." ...? :)
Alois Mahdal
4

Kurz gesagt:
Ich stimme zu, dass gute Namen wichtig sind, aber ich denke nicht, dass Sie sie finden müssen, bevor Sie sie um jeden Preis implementieren.

Natürlich ist es besser, von Anfang an einen guten Namen zu haben. Wenn Sie jedoch nicht in zwei Minuten eine finden können, kostet das spätere Umbenennen weniger Zeit und ist aus Sicht der Produktivität die richtige Wahl.

Lang: Im
Allgemeinen lohnt es sich oft nicht, vor der Implementierung zu lange über einen Namen nachzudenken. Wenn Sie Ihre Klasse implementieren, indem Sie sie "Foo" oder "Dsnfdkgx" nennen, sehen Sie während der Implementierung, wie Sie sie hätten benennen sollen.

Insbesondere bei Java + Eclipse ist das Umbenennen von Dingen überhaupt kein Problem, da alle Referenzen in allen Klassen sorgfältig behandelt werden, Sie vor Namenskollisionen gewarnt werden usw. Und solange sich die Klasse noch nicht im Versionskontroll-Repository befindet, tue ich das nicht. Ich glaube nicht, dass etwas falsch ist, wenn man es 5 Mal umbenennt.

Grundsätzlich geht es darum, wie Sie über Refactoring denken. Persönlich mag ich es, obwohl es meine Teamkollegen manchmal nervt, weil sie daran glauben, niemals ein laufendes System zu berühren . Und von allem, was Sie umgestalten können, ist das Ändern von Namen eines der harmlosesten Dinge, die Sie tun können.

Lena Schimmel
quelle
3

Warum nicht HelpDocumentServiceClient als eine Art Bissen oder HelpDocumentClient ... es spielt keine Rolle, ob es sich um einen Anbieter handelt, sondern um einen Client für einen Webservice, der sich mit Hilfedokumenten befasst.

Und ja, das Benennen ist schwer.

JoshBerke
quelle
3

Es gibt nur einen vernünftigen Namen für diese Klasse:

HelpRequest

Lassen Sie sich von den Implementierungsdetails nicht von der Bedeutung ablenken.

Angus Glashier
quelle
Eineinhalb Jahre später wollte ich HelpLibraryfür die Klasse vorschlagen , aber das ist mindestens genauso gut. Es lohnt sich, zuerst die Antworten durchzulesen!
Jeff Sternal
2

Investieren Sie in ein gutes Refactoring-Tool!

TGnat
quelle
lol. Manchmal ist Refactoring nicht die beste Option (große C ++ - Projekte), aber ich habe sicherlich schon früher darauf zurückgegriffen. Manchmal muss ich einfach Dinge erledigen und die Namen kommen später zu mir.
Steve S
2

Ich halte mich an die Grundlagen: VerbNoun (Argumente). Beispiele: GetDoc (docID).

Es besteht kein Grund zur Fantasie. In einem Jahr wird es leicht zu verstehen sein, ob Sie es sind oder jemand anderes.

LJ.
quelle
Während dies gut liest, organisiert es sich schlecht, weil es rückwärts ist. Es ist besser, DocGet () zu sagen, da beim Erstellen von DocAdd () DocRemove () usw. alle zusammen in einer Liste angezeigt werden. Ihre Methode zeigt wirklich, wie hässlich es wird, wenn Sie Dutzende von Gets oder so weiter haben.
TravisO
Hervorragender Vorschlag, TravisO.
Jon Smock
Normalerweise würde ich kein Verb für eine Klasse verwenden.
Willcodejavaforfood
2

Für mich ist es egal, wie lange ein Methoden- oder Klassenname so lang ist, wie er beschreibend ist und in der richtigen Bibliothek. Die Zeiten, in denen Sie sich daran erinnern sollten, wo sich die einzelnen Teile der API befinden, sind lange vorbei.

Intelisense gibt es für alle wichtigen Sprachen. Wenn ich eine API eines Drittanbieters verwende, verwende ich daher lieber deren Intelisense für die Dokumentation als die 'tatsächliche' Dokumentation.

In diesem Sinne kann ich einen Methodennamen wie erstellen

StevesPostOnMethodNamesBeingLongOrShort

Lang - aber na und. Wer verwendet heutzutage keine 24-Zoll-Bildschirme!

Steve
quelle
1

Ich muss zustimmen, dass das Benennen eine Kunst ist. Es wird ein wenig einfacher, wenn Ihre Klasse einem bestimmten "Desigh-Muster" folgt (Fabrik usw.).

Otávio Décio
quelle
1

Dies ist einer der Gründe für einen Codierungsstandard. Wenn Sie einen Standard haben, können Sie bei Bedarf Namen finden. Es hilft Ihnen, Ihren Geist für andere interessantere Dinge zu befreien! (-:

Ich würde empfehlen, das entsprechende Kapitel von Steve McConnells Code Complete ( Amazon-Link ) zu lesen, das verschiedene Regeln enthält, um die Lesbarkeit und sogar Wartbarkeit zu verbessern.

HTH

Prost,

rauben

Rob Wells
quelle
1

Nein, das Debuggen ist das Schwierigste für mich! :-)

Eintopf S.
quelle
Beim Debuggen kommt es normalerweise darauf an, die richtige Frage zu stellen. Es gibt dieses Zahlenspiel, bei dem Sie eine Zahl von 1 bis 1000 erraten müssen. Wenn Ihre Vermutung zu niedrig oder zu hoch ist, werden Sie von der Konsole darüber informiert, und Sie haben nur 10 Versuche. Wie geht's?
Haoest
1

DocumentFetcher? Ohne Kontext ist es schwer zu sagen.

Es kann hilfreich sein, sich wie ein Mathematiker zu verhalten und unterwegs ein Lexikon für Ihre Domain auszuleihen / zu erfinden: Entscheiden Sie sich für kurze, einfache Wörter, die das Konzept vorschlagen, ohne es jedes Mal zu formulieren . Zu oft sehe ich lange lateinische Phrasen, die in Akronyme umgewandelt werden, sodass Sie ohnehin ein Wörterbuch für die Akronyme benötigen .

Darius Bacon
quelle
1

Die Sprache, die Sie zur Beschreibung des Problems verwenden, ist die Sprache, die Sie für die Variablen, Methoden, Objekte, Klassen usw. verwenden sollten. Nomen stimmen lose mit Objekten und Verben mit Methoden überein. Wenn Ihnen Wörter fehlen, um das Problem zu beschreiben, fehlt Ihnen auch ein umfassendes Verständnis (Spezifikation) des Problems.

Wenn Sie nur zwischen einer Reihe von Namen wählen, sollte dies von den Konventionen abhängen, die Sie zum Erstellen des Systems verwenden. Wenn Sie an einen neuen Ort gekommen sind, der durch frühere Konventionen aufgedeckt wurde, lohnt es sich immer, einige Anstrengungen zu unternehmen, um sie (richtig, konsequent) zu erweitern, um diesen neuen Fall abzudecken.

Wenn Sie Zweifel haben, schlafen Sie darauf und wählen Sie am nächsten Morgen den ersten offensichtlichen Namen :-)

Wenn Sie eines Tages aufwachen und feststellen, dass Sie sich geirrt haben, ändern Sie es sofort.

Paul.

Übrigens: Document.fetch () ist ziemlich offensichtlich.

Paul W. Homer
quelle
1

Ich finde, ich habe die meisten Probleme mit lokalen Variablen. Zum Beispiel möchte ich ein Objekt vom Typ DocGetter erstellen. Ich weiß also, dass es ein DocGetter ist. Warum muss ich ihm einen anderen Namen geben? Normalerweise gebe ich ihm einen Namen wie dg (für DocGetter) oder temp oder etwas ähnlich Unbeschreibliches.

Jason Baker
quelle
1

Vergessen Sie nicht, dass Designmuster (nicht nur die GoF-Muster) eine gute Möglichkeit sind, ein gemeinsames Vokabular bereitzustellen. Ihre Namen sollten immer dann verwendet werden, wenn sie der Situation entsprechen. Dies hilft sogar Neulingen, die mit der Nomenklatur vertraut sind, die Architektur schnell zu verstehen. Soll sich diese Klasse, an der Sie arbeiten, wie ein Stellvertreter oder sogar wie eine Fassade verhalten?

Herrmann
quelle
1

Sollte die Herstellerdokumentation nicht das Objekt sein? Ich meine, dass man greifbar ist und nicht nur als Anthropomorphisierung eines Teils Ihres Programms. Möglicherweise haben Sie eine VendorDocumentationKlasse mit einem Konstruktor, der die Informationen abruft. Ich denke, wenn ein Klassenname ein Verb enthält, ist oft etwas schiefgegangen.

Svante
quelle
1

Ich fühle dich definitiv. Und ich fühle deinen Schmerz. Jeder Name, an den ich denke, scheint mir nur Müll zu sein. Es scheint alles so allgemein zu sein und ich möchte irgendwann lernen, wie ich meinen Namen ein bisschen Flair und Kreativität verleihen kann, damit sie wirklich das widerspiegeln, was sie beschreiben.

Ein Vorschlag, den ich habe, ist, einen Thesaurus zu konsultieren. Word hat ein gutes Wort, ebenso wie Mac OS X. Das kann mir wirklich helfen, meinen Kopf aus den Wolken zu holen, und gibt mir einen guten Ausgangspunkt sowie Inspiration.

John Gallagher
quelle
0

Wenn sich der Name einem Laienprogrammierer erklären würde, müsste er wahrscheinlich nicht geändert werden.

Dreamlax
quelle