Hintergrund
Ich lese das "Clean Code Book" und arbeite parallel dazu an Calisthenic-Objekten wie dem Bankkonto, und ich halte mich an diese Regel:
Die 9. Regel von Calisthenic-Objekten ist, dass wir keine Getter oder Setter verwenden.
Es scheint ziemlich lustig zu sein und ich stimme diesem Prinzip zu. Darüber hinaus erklärt der Autor auf Seite 98-99 von Clean Code, dass Getter / Setter die Abstraktion brechen und dass wir unser Objekt nicht fragen müssen, sondern unser Objekt mitteilen müssen.
Das macht für mich vollkommen Sinn und ich stimme diesem Prinzip voll und ganz zu. Das Problem kommt in der Praxis.
Kontext
Zum Beispiel habe ich eine Anwendung, in der ich einige Benutzer auflisten und die Benutzerdetails anzeigen muss.
Mein Benutzer besteht aus:
-> Name
--> Firstname --> String
--> Lastname --> String
-> PostalAddress
--> Street --> String
--> PostalCode --> String
Problem
Wie kann ich vorgehen oder was kann ich tun, um Fehler zu vermeiden, wenn ich nur einfache Informationen anzeigen muss ( und bestätigen muss, dass ich für dieses bestimmte Feld keine zusätzliche Operation benötige ), um den Wert für den Vornamen in einem einfachen ( zufällige) Ausgabeunterstützung?
Was fällt mir ein?
Eine Lösung besteht darin, Folgendes zu machen:
user.getName().getFirstName().getStringValue()
Was absolut schrecklich ist, viele Regeln für Calisthenic-Objekte zu brechen und das Demeter-Gesetz zu brechen.
Ein anderer wäre so etwas wie:
String firstName = user.provideFirstnameForOutput();
// That would have called in the user object =>
String firstName = name.provideFirstnameForOutput();
// That would have called in the name object =>
String firstName = firstname.provideFirstnameForOutput();
Aber ich fühle mich mit dieser Lösung nicht wohl, die nur ein "Accessor höherer Ordnung" zu sein scheint, wie das Umgehen von Standard-Getter / Setter mit einer Methode, die nur darauf abzielt, dem Demeter-Gesetz zu entsprechen ...
Irgendeine Idee ?