Ich habe ein Eckfallproblem mit der allgemeinen Anleitung von:
- Substantive für Variablen
- Verben für Funktionen
Insbesondere habe ich einen Fall, in dem das Wort mehrdeutig ist - es kann entweder ein Verb oder ein Substantiv sein. In einigen Fällen wird die Anwendung im selben Satz in beide Richtungen verwendet .
Ich möchte sicherstellen, dass das Programm auch für zukünftige Entwickler und mich selbst lesbar bleibt, wenn ich Monate später zu Codeabschnitten zurückkehre.
Eines der Beispiele ist mit a battery
. A battery
hat eine charge
und man kann auch charge()
eine Batterie.
Ich denke, dass beides zu haben Battery.Charge
und Battery.Charge(value)
für zukünftige Entwickler verwirrend sein wird.
Meine derzeitige Lösung besteht darin, einfach ein anderes Wort für einen oder beide dieser Fälle (die Variable und die Funktion) auszuwählen. Mein Problem bei diesem Ansatz ist, dass die Battery
Variable und Funktion des Objekts charge
nicht mit den Designdiskussionen übereinstimmt , an denen das Objekt beteiligt ist Battery
.
Meine Frage ist, ob es einen anderen / besseren Weg gibt, um mit diesem Konflikt in der Namenskonvention umzugehen.
Einige zusätzliche Lektüre zu diesem Thema. Keiner ging wirklich auf das Besondere meiner Frage ein.
enqueue
ist kein Wort, sondern ein Verb in Java. Wie wäre esdoCharge
? Der Symmetrietest wird weiterhin fehlschlagen, da Ihre anderen Methoden dieses Präfix nicht habenAntworten:
In ähnlichen Situationen versuche ich Synonyme zu finden. In diesem Fall würde ich "recharge" für das Verb verwenden. Das "Re" ist etwas überflüssig, aber die Bedeutung ist klar. Die Verwendung der einfachen "Ladung" für die verbleibende Ladung in der Batterie ist nicht eindeutig, da sie keine physikalischen Einheiten angibt. Ich würde "availableAmpHours", "hoursUntilRecharge" oder ähnliches bevorzugen. Die Einheiten hängen davon ab, was für die Anwendung geeignet ist.
Meine persönliche Präferenz ist es, Verben nur für Funktionen zu verwenden, die ihren Zustand ändern. Ich benutze Substantive für nicht mutierende Funktionen. Ich nehme an, es hängt von Ihrer Sicht ab. Auf der Maschinenebene tun nicht mutierende Funktionen etwas, auf der Modellebene jedoch nicht.
quelle
Wirf das einfach raus, aber vielleicht besteht die Lösung für diese Instanz der Mehrdeutigkeit darin, diese Funktionalität vollständig aus der Batterie zu entfernen. Ich habe noch nie einen Akku gesehen, der sich selbst auflädt, und es wäre für mich sinnvoller, eine BatteryCharger-Klasse zu haben. Dies würde dazu beitragen, Ihre Bedenken stärker zu entkoppeln und die Aktion deutlicher zu machen.
battery.Charge(50)
vsbatteryCharger.Charge(battery, 50)
Für mich ist das zweite Formular viel verständlicher und speichert Ihren gesamten "Lade" -Code an einem Ort, anstatt ihn über alle Batterieklassen zu streuen.
quelle
Battery
ist es eine Abstraktion für das Batterieladesystem. Für unsere App ist es nicht erforderlich, die beiden Aspekte in separate Objekte zu unterteilen, sodass sie der Einfachheit halber in einem Objekt zusammengefasst werdenBattery
. Letztendlich schreibt die Physik eines aufladbaren Akkus vor, dass er eine Art Funktion hat, um eine Ladung anzunehmen.Vermeiden Sie doppelte Bedeutungen
Sie haben absichtlich ein Wort ausgewählt, das mehr als eine Bedeutung hat, und diese erste Entscheidung ist das Problem. Es gibt eine Menge Wörter, die für Programmierer problematisch sind. Ein anderes Beispiel wäre
phone
. Sie könnenphone
jemanden, oder Sie könnten einephone
in der Tasche haben.Verwenden Sie Getter und Setter
Die Standardbenennung für die meisten Objekte sind die Get- / Einstellungsmethoden für Eigenschaften.
Eigenschaften sind Zustände, nicht Substantive
Ich glaube, Sie täuschen sich, wenn Sie Objekteigenschaften als Substantive klassifizieren, und Variablen könnten auch als Zustände betrachtet werden. Sie sind Staaten, die für den lokalen Geltungsbereich ihrer Existenz relevant sind.
Sie könnten den Wert, den sie haben, als Substantiv beschreiben, aber ich bin mir nicht sicher, ob dies in allen Fällen zutrifft.
In der OOP-Terminologie beschreiben Objekteigenschaften den Status dieses Objekts. In Ihrem Fall
Battery
ist das ein Objekt und esCharge
ist ein Zustand. Das wäre also eine Eigenschaft des Objekts, aber dies hängt vom Kontext ab, in dem es verwendet wird.Wenn Sie in der Lage sein müssen,
Charge
die Batterie und auch wissen, was es aktuellCharge
ist, dann haben Sie ein Problem.Verwenden des Bereichs zum Erzwingen des Kontexts
Der Kontext verdeutlicht, welche Bedeutung eines Wortes Sie mit einer Methode oder Eigenschaft vermitteln möchten. Der Bereich legt die Zugänglichkeit einer Eigenschaft / Methode von außerhalb des Objekts fest.
Methoden sind Verben
Sie können die Methode eines Objekts als Verb beschreiben, aber das Wort Aktion ist besser geeignet. In der OOP-Terminologie führen Sie Aktionen für Objekte mithilfe ihrer Methoden aus. Es ist eine schlechte Form, die Eigenschaft eines Objekts von außerhalb des Objekts zu ändern. Es wird empfohlen, eine Methode aufzurufen, die die erforderlichen Aktionen ausführt, durch die sich der Status ändert.
Das Wort
Charge
ist ein Verb, aber es ist auch ein Substantiv. Beim Aufruf der Methode einer Aktion wird deutlich, dass das Verb verwendet wirdBattery.Charge(....)
.Der Kontext ist jedoch sehr wichtig. Das Wort
Charge()
ist zwar ein Verb, aber nicht so aussagekräftig wiestartCharging()
.Gültige Methoden
Battery
könntenCharging
,Discharging
,setCharge
,getCharge
,hasCharge
,Discharge
undCharged
.Einfache Ein-Wort-Methoden geben ihre Handlungen oft nicht explizit an, aber es gibt Fälle wie
open
und inclose
denen wenig Erklärung erforderlich ist.Es gibt also keine richtige Antwort darauf, wie diese Arten von Eigenschaften / Methoden benannt werden sollen. Mit der Ausnahme, dass Sie die oben genannten Techniken mit Bedacht anwenden müssen, um sicherzustellen, dass keine Verwirrung herrscht.
quelle
StartCharge()
undEndCharge()
implizieren würde. Tatsächlich würde diese Terminologie den Aufwand für die Handhabung des Batteriesystems erheblich erhöhen. In jedem Intervall kann es entwederCharge()
oderDischarge()
.Charge
Zufällig ist es das am leichtesten zu verstehende mehrdeutige Wort für diesen Bereich. Es gibt mehrere andere.Stellen Sie ihnen Verben voran, die sie zu einem Verb oder Substantiv machen.
quelle
Für den Verbfall halte ich das für
Charge
OK. Für den Nomenfall würdegetCurrentChargeLevel
für Sie arbeiten?quelle
getCurrentChargeLevel()
immer noch auf eine interne Variable von verweisenBattery
, und wie würde der Name dieser Variablen lauten?Battery.currentChargeLevel
funktionieren könnte. Sie könnten versuchen, mitBattery.coloumbs
oder,Battery.ampereHours
aber das könnte nicht so offensichtlich sein ...Charge
istEnergy
was istPower
(Volt * Ampere == Watt) multipliziert mit der Zeit. In diesem Fall ist die Gebühr eine Zahl. Es gibt auch einen Ladezustand, der zufällig ein Prozent beträgt.Watt*time
würde definitiv nicht mit Design-Gesprächen übereinstimmen, aberChargeLevel
würde.In den meisten Fällen ist das Hinzufügen eines Hilfsverbs, Adverbs oder Adjektivs gut genug, um sie zu unterscheiden, und kann tatsächlich zum Verständnis beitragen. Wenn Sie Charge and Charge () bei einem Akku verwenden, kann DeltaCharge () zeigen, dass es sich um eine Funktion handelt, die sowohl das Laden als auch das Entladen ermöglicht.
Delta (in Fällen, in denen es eine Änderung gibt, die aber nicht eindeutig ist) ist ein Modifikator, den ich immer wieder verwende und anderen empfehle, um Zustandsänderungen zu behandeln (auch wenn das Verb halb offensichtlich ist).
quelle
Ungarische Bezeichnung zur Rettung. Sie können
intCharge
und habenfcnCharge(value)
, um Verwirrung zu vermeiden und keinen verrückten langen Namen hinzuzufügen, wenn drei Buchstaben gut funktionieren.Oder Sie könnten einfach den gleichen Namen verwenden und die IDE damit umgehen lassen. Das Erstellen eines längeren oder anderen Namens kann auf lange Sicht sowieso genauso verwirrend sein.
quelle