Das Benennen von Klassen wird schwächend [geschlossen]

9

Ich bin mir nicht sicher, ob dies ein OCD-Merkmal ist oder nicht, aber ich finde, dass ich manchmal vollständig blockiert werde und nicht mehr weitermachen kann, was ich tue, wenn ich eine Klasse (oder Funktion oder einen Namespace usw.) benenne, von der ich glaube, dass sie außerhalb verwendet werden soll eines bestimmten Projekts. Eine API zum Beispiel. Oder eine Utility-Klassenbibliothek.

Wenn die Benennung nicht genau richtig ist (in meinen Gedanken), kann ich einfach nicht weitermachen ... Ich stecke fest und versuche, den richtigen Namen zu finden. Ich habe versucht, kleine Apps zu schreiben, mit denen ich sehen kann, wie die Namen aussehen, aber das scheint nicht zu helfen ...

Ich weiß, dass es keine Rolle spielen sollte, und es widerspricht jeder Programmier-Denkweise, anzunehmen, dass Sie es auf Anhieb perfekt machen würden ... Ich fühle mich einfach machtlos dafür ...

Alle Tipps / Ideen wäre sehr dankbar ...

Davidsleeps
quelle
3
Nach meiner Erfahrung fallen der Name der Klasse und die Methoden an ihre Stelle, sobald Sie den Hauptteil der Klasse fertiggestellt, neu faktorisiert usw. haben.
Job
11
Obligatorisches Zitat: „In der Informatik gibt es nur zwei schwierige Probleme: die Ungültigmachung des Caches und die Benennung von Dingen.“ - Phil Karlton
Macke
Ein vertrautes Gefühl. Gib einfach nicht auf, nenne die Dinge nicht "Common", "Utilities", "Managers" und "Helpers". :)
Arnis Lapsa

Antworten:

10

Meiner Meinung nach besteht das Problem darin, nicht nur einen besseren Weg zu finden, um gute Namen zu finden, sondern auch mit dem Zwang umzugehen, dies zu tun. Wenn ich ehrlich bin, erkenne ich ein ähnliches Merkmal in mir. Namen sind schließlich wichtig, und ich mag einen guten Namen für die Konzepte, an denen ich arbeite. Sie sind jedoch nicht immer das Wichtigste.

Hier sind einige der Methoden, mit denen ich solche Dinge überwinden kann:

  1. Erkennen Sie, dass es keine perfekte Lösung gibt, nur Lösungen, die besser sind als andere.
  2. Eines nach dem anderen. Es ist wichtiger, eine Programmieraufgabe abzuschließen, als sie perfekt auszuführen.
  3. Fragen Sie andere Leute. Wir haben alle unsere Gebiete, in denen wir festsitzen, aber glücklicherweise stecken verschiedene Menschen an verschiedenen Orten fest. Vielleicht hat jemand anderes einen guten Namen oder sagt Ihnen, dass es wirklich egal ist.
  4. Legen Sie ein Zeitlimit fest. Geben Sie sich x Minuten Zeit, um das zu tun, woran Sie aufgehängt sind, und fahren Sie dann fort.
  5. Versprich dir, dass du später wiederkommst. Führen Sie ein Protokoll der Dinge, zu denen Sie zurückkehren möchten. Viele dieser Probleme werden klarer, wenn Sie sie ein wenig in Ruhe lassen. Entweder finden Sie später einen besseren Namen, oder Sie erkennen, dass dies wirklich keine Rolle spielt.
  6. Erkenne, dass es in 100 Jahren sowieso niemanden interessieren wird.
  7. Mach das Gegenteil. Geben Sie einer Klasse einen wirklich schlechten Namen und sehen Sie, was passiert. Dies bestätigt entweder die Notwendigkeit, Zeit mit besseren Namen zu verbringen, oder zeigt Ihnen, wie wenig es wirklich wichtig ist. Dies wird Ihnen auch helfen, aus der obsessiven Denkweise auszubrechen.
  8. Beten. Das funktioniert oft bei mir.
  9. Schätzen Sie sich unabhängig von dem, was Sie tun. Brechen Sie von der Idee ab, dass Ihr eigener Wert von der Bereitstellung von Perfektion herrührt. Wenn wir erkennen, dass wir einen inneren Wert haben, ganz abgesehen von unseren Jobs, schämen wir uns weniger, wenn wir nicht unseren eigenen Standards entsprechen.
  10. Erstelle neue Wörter und benutze sie, um deine Klassen zu benennen oder um alte wiederzuverwenden. Das Programmieren ist ein kreativer Prozess, und manchmal sind die Ideen, die wir erfassen, neue Ideen. Neue Ideen brauchen neue Namen. "EmployeeTransmogrifier" ist ein vollkommen gültiger Name für eine Klasse.
  11. Bedenken Sie, dass Sie versuchen, das falsche Problem zu lösen. Zum Beispiel ist es keine gute Idee, eine API zu schreiben, ohne eine sehr klare Vorstellung davon zu haben, welche Bedürfnisse der Anrufer hat. Wenn Sie dieses Problem lösen, ist Ihr Namensproblem möglicherweise viel einfacher.
  12. Zu Mittag essen. Das Mittagessen ist immer gut.
Kramii
quelle
4
+1 zum Mittagessen. Viele Leute legen nicht genug Wert darauf, über etwas anderes nachzudenken, um ein Problem zu lösen.
Unholysampler
Einige großartige und gut durchdachte Punkte ...
Davidsleeps
5

zuerst

Stellen Sie sich die Frage "Was ist der einzige Zweck dieser Klasse?". Ohne das Prinzip der Einzelverantwortung einzuhalten, wird es sehr schwierig, Klassen und Methoden zu benennen. Wenn Sie diese Frage nicht beantworten können, müssen Sie möglicherweise überlegen, was die Klasse tun soll, und die Bedenken trennen. Dies erleichtert die Benennung

Zweitens

Haben Sie ein Muster für die Benennung Ihrer Klassen? Versuchen Sie vielleicht, einige gängige Namensmuster zu betrachten, zum Beispiel das Muster, das viel einfacher zu befolgen ist, wenn Sie sich oben mit SRP befasst haben. Analysiert Ihre Klasse XML? Versuchen Sie XMLParser. Analysiert es XML, erstellt Domänenmodelle, um die Eingabe darzustellen, speichert sie in der Datenbank und sendet dann eine Erfolgsmeldung an Twitter? Versuchen Sie es mit Refactoring.

Drittens

Ich verstehe, woher du kommst, und war schon einmal in einer ähnlichen Situation. Versuchen Sie vielleicht, Ihre Klasse mit einigen Funktionen zu versehen, zunächst mit einem temporären Namen. Bei jeder guten IDE oder jedem Refactoring-Assistenten sollte das Umbenennen der Klasse mit einem Klick erfolgen. Das, was Sie Ihrer Klasse zunächst nennen, muss also nicht dauerhaft sein! Dies hilft Ihnen, Ihren OCD-Block zu überwinden und Ihrem Unterbewusstsein Zeit zu geben, ihn ein wenig weiter zu verarbeiten.


Endlich und etwas abseits des Themas

Ich hatte einen Moment mit einer Glühbirne in einer Arbeit, die ich neulich erledigte, als ich ein unkritisches System implementierte, und ich verbrachte eine ganze Weile damit, mit verschiedenen Namen von Klassen usw. herumzuspielen. Benennen Sie Ihre Schnittstellen entsprechend der Funktionalität, benennen Sie Ihre Klassen entsprechend ihrer spezifischen Implementierung ... Zum Beispiel könnten Sie versucht sein, IXMLParser und XMLParser zu haben, aber was passiert, wenn sich Ihre Eingabe in JSON ändert? Versuchen Sie stattdessen IInputParser. Auf diese Weise können Sie konkrete Klassen XMLParser und JSONParser erstellen, die beide IInputParser auf unterschiedliche Weise implementieren.

mjhilton
quelle
Ja, ich hatte auch so einen Moment ... Das Problem ist, dass Sie sehr gut darin sind und nie nur den beabsichtigten Code schreiben können. Drei sind immer ein anderes Layout der Abstraktion ...
Robin Vessey
1

Für mich ist es normalerweise ein Zeichen, dass das Design in meinem Kopf nicht klar ist, also mache ich mir einen Namen und gebe mir Zeit (sagen wir 2 Minuten), um einen besseren zu finden. Am Ende dieser Zeit muss ich benutze die, die ich mir zuerst ausgedacht habe. Barney, Wilma und Fred sind zunächst die Favoriten. Ich mache Dinge wie "BarniesInputParser". Die Namen sind so schlecht, dass ich mir einen besseren ausdenken oder sie später ändern muss. Sie sind auch so schlecht, dass sie einzigartig sind, was das Refactoring trivial und sicher macht, und jeder, der sich den unvollständigen Code ansieht, kann sofort erkennen, dass er unvollständig ist.

Das Wichtigste ist, dass Sie Ihrem Gehirn keine neuen Informationen geben, um den Namen zu definieren (und das Design zu klären), während Sie keine Funktionen hinzufügen. Alles, was Sie tun, ist, denselben Input auf unterschiedliche Weise wiederzugeben.

Oder mach einen Kaffee. Bevor Sie zur Maschine kommen, werden Sie es haben ...

mattnz
quelle
Erschreckenderweise kenne ich ausgelieferte Software, die so benannt wurde. Stellen Sie sich vor, Sie versuchen dies 5 Jahre später zu erklären, wenn Sie der einzige in der Firma sind, der noch weiß, wer "Tim" ist.
Yaur
0

Ich habe das vor einiger Zeit von einem Freund bekommen. Schreiben Sie auf, was Ihr Prozess tun soll. Nur eine kurze Erzählung. Nehmen Sie dann die Substantive und verwandeln Sie sie in Klassen, die Verben in Methoden und die Adverbien in Eigenschaften.

Arbeit vermeiden
quelle
Dies ist eine einfache Übung vom Typ CS101, um OOAD zu unterrichten . Es fehlt jedoch in jedem realen System, das nicht von einem Professor oder Lehrbuchautor erfunden wurde.