fundo
Estou lendo o livro "Código Limpo" e, paralelamente, estou trabalhando em objetos calistênicos Kata como a conta bancária, e estou preso a essa regra:
A 9ª regra dos objetos calistênicos é que não usamos getter ou setters.
Parece bem divertido, e eu concordo com esse princípio. Além disso, na página 98-99 do Código Limpo, o autor explica que os getters / setters quebram a abstração e que não precisamos perguntar ao nosso objeto, mas precisamos informar ao objeto.
Isso faz todo o sentido em minha mente e concordo plenamente com esse princípio. O problema vem na prática.
Contexto
Por exemplo, estou tendo um aplicativo no qual preciso listar alguns usuários e exibir os detalhes do usuário.
Meu usuário é composto por:
-> Name
--> Firstname --> String
--> Lastname --> String
-> PostalAddress
--> Street --> String
--> PostalCode --> String
Problema
Como posso fazer ou o que posso fazer para evitar getters quando preciso exibir apenas uma informação simples ( e tenho que confirmar que não preciso de operação extra nesse campo específico ) para exibir o valor do Nome de maneira simples ( aleatório) suporte de saída?
O que aparece em minha mente
Uma solução é fazer:
user.getName().getFirstName().getStringValue()
O que é totatally terrível, quebrando muitas regras de objetos calistênicos e violando a Lei Deméter.
Outro seria algo como:
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();
Mas não me sinto confortável com essa solução, que parece apenas um "acessador de ordem superior", como contornar o getter / setter padrão com um método que visa apenas corresponder à lei de Demeter ...
Qualquer ideia ?