Contexte
Je lis le "Clean Code book", et, en parallèle, je travaille sur des objets calisthéniques Kata comme le compte bancaire, et je suis coincé sur cette règle:
La 9ème règle des objets calisthéniques est que nous n'utilisons pas de getter ou de setters.
Cela semble assez amusant et je suis d'accord avec ce principe. De plus, à la page 98-99 de Clean Code, l'auteur explique que les getters / setters brisent l'abstraction, et que nous n'avons pas à demander notre objet, mais nous devons le dire.
Cela est parfaitement logique dans mon esprit et je suis entièrement d'accord avec ce principe. Le problème vient en pratique.
Le contexte
Par exemple, j'ai une application dans laquelle je dois lister certains utilisateurs et afficher les détails de l'utilisateur.
Mon utilisateur est composé de:
-> Name
--> Firstname --> String
--> Lastname --> String
-> PostalAddress
--> Street --> String
--> PostalCode --> String
Problème
Comment puis-je faire ou que puis-je faire pour éviter les getters lorsque je n'ai besoin que d'afficher une information simple ( et je dois confirmer que je n'ai pas besoin d'opération supplémentaire sur ce champ particulier ) pour afficher la valeur Firstname dans un simple ( prise en charge de sortie aléatoire?
Ce qui me vient à l'esprit
Une solution consiste à faire:
user.getName().getFirstName().getStringValue()
Ce qui est totalement terrible, enfreignant de nombreuses règles des objets calisthéniques et enfreignant la loi Demeter.
Un autre serait quelque chose comme:
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();
Mais je ne me sens pas à l'aise avec cette solution, qui ne semble être qu'un "accesseur d'ordre supérieur" comme contourner le getter / setter standard avec une méthode qui ne vise qu'à correspondre à la loi de Demeter ...
Une idée ?