Benennen Sie Klassen wie bei Magic: The Gathering Cards

Blogvorlage 16

 

alexblog2
Ich bin mit Magic: The Gathering aufgewachsen. Als Kind fiel mir etwas Interessantes an den Kartennamen auf – es gab keine generischen Namen. Es gab keine Karten mit den Namen „Zombie“, „Elf“ oder „Zauberer“. Es gab Karten mit den Namen „Flüchtling-Zauberer“, „Llanowar-Elfen“, „Gravebane-Zombie“ und sogar „Sturmkrähe“, aber keine „Krähe“. Moderne Kartennamen sind sogar noch spezifischer und aussagekräftiger; Beispiele dafür sind „Krähe der dunklen Botschaft“ und „Flammenherz-Werwolf“. Warum? Weil die Designer Platz für neue Karten lassen müssen. Wenn es eine Karte mit dem Namen „Zombie“ gab, war es diese. Diese Karte zeigt, was ein Zombie ist. Wenn Sie eine weitere Zombie-Karte erstellen möchten, wird sie im Schatten des ursprünglichen „Zombies“ leben.
Dies findet Anwendung in der Softwareentwicklung. Die Namen, die wir für Klassen wählen, bestimmen, wie wir über sie denken und welche Aufgaben wir ihnen zuordnen. Wenn Sie eine Klasse namens „Benutzer“ haben, ist es sinnvoll, Dinge, die mit dem Konzept „Benutzer“ zusammenhängen, in diese Klasse zu packen. Das ist allerdings ein Problem. Es ist sinnvoll, irgendwas. im Zusammenhang mit diesem Konzept in der Benutzerklasse. Sie erhalten Anmeldeinformationen, Rechnungseinstellungen, E-Mail-Einstellungen und Berechtigungen. Es ist seit langem bekannt, dass große Klassen Probleme bereiten. Sie sind schwieriger zu lesen, da sie mehr Logik an derselben Stelle enthalten, sie sind schwieriger zu ändern, da die Logik eher verwickelt ist, und das erhöht die Wahrscheinlichkeit von Fehlern.
Klassennamen bilden die Grundlage für die Logik, die sich im Laufe der Zeit in der Klasse entwickelt. Wir dürfen nicht vergessen, dass wir Code nicht nur einmal schreiben und dann ist er fertig. Der Code entwickelt sich ständig weiter und wird ständig an neue Anforderungen angepasst. In jeder Phase fragen sich Entwickler: „Wo ist diese Logik sinnvoll?“ Wie Stephen Wolfram bemerkte, „Die Namen von Funktionen … bestimmen direkt, wie Menschen über eine Funktion denken.“ Entwickler betrachten Klassennamen als ein Zeichen dafür, wo die Logik hingehört. Das von der Klasse verkörperte Konzept ist ein weiteres Zeichen. Wenn Name und Konzept weit gefasst sind, werden Entwickler viele Logikelemente in die Klasse integrieren.
Ein weiterer Punkt bei generischen Klassennamen ist, dass sie nicht beschreibend sind. Öffnet man eine Klasse namens „User“, hat man nicht sofort eine Vorstellung von den möglichen Daten. Sie kann viele Dinge enthalten. Man muss sie durchlesen, um sie herauszufinden und sich für das nächste Mal merken. Das stellt eine große kognitive Belastung für Entwickler dar. Sie müssen die Details großer Klassen im Hinterkopf behalten oder sie zur Sicherheit nochmal durchlesen. Wäre der Name beispielsweise „LoginCredentials“, wäre der Inhalt ziemlich offensichtlich. Der Name leitet den Leser, indem er die Rolle der Klasse eingrenzt.
Wir sollten darauf achten, dass unser Code viele Hinweise liefert, um verständlich zu sein. Namen sind ein wichtiges Puzzleteil. Wenn wir, wie bei Magic: The Gathering, versuchen, „User“ in einen aussagekräftigeren Namen umzubenennen, werden wir schnell feststellen, dass wir ihn aufteilen müssen. Wir erhalten wahrscheinlich kleinere, fokussiertere Klassen, was ebenfalls von Vorteil ist.

Autorin

  • Adam McKenzie

    Als CTO ist Adam für die Leitung der HPC- und Kundenerfolgsteams verantwortlich. Adam begann seine Karriere bei Boeing, wo er sieben Jahre lang an der 787 arbeitete und Struktur- und Softwareentwicklungsprojekte zur Konstruktion, Analyse und Optimierung der Tragflächen leitete. Adam hat einen Bachelor of Science in Maschinenbau mit Auszeichnung von der Oregon State University.