Antecedentes
Estoy leyendo el "Libro de código limpio" y, paralelamente, estoy trabajando en objetos calisténicos Kata como la cuenta bancaria, y estoy atascado en esa regla:
La novena regla de los objetos calisténicos es que no usamos getter o setters.
Parece bastante divertido, y estoy de acuerdo con este principio. Además, en la página 98-99 de Clean Code, el autor explica que los captadores / establecedores rompen la abstracción, y que no tenemos que preguntarle a nuestro objeto, sino que debemos decirle a nuestro objeto.
Esto tiene mucho sentido en mi mente, y estoy totalmente de acuerdo con este principio. El problema viene en la práctica.
Contexto
Por ejemplo, tengo una aplicación en la que tengo que enumerar algunos usuarios y mostrar los detalles del usuario.
Mi usuario está compuesto por:
-> Name
--> Firstname --> String
--> Lastname --> String
-> PostalAddress
--> Street --> String
--> PostalCode --> String
Problema
¿Cómo puedo hacer o qué puedo hacer para evitar captadores cuando solo necesito mostrar una información simple ( y tengo que confirmar que no necesito una operación adicional en ese campo en particular ) para mostrar el valor de Nombre en un simple ( aleatorio) soporte de salida?
Lo que viene a mi mente
Una solución es hacer:
user.getName().getFirstName().getStringValue()
Lo cual es terriblemente terrible, que rompe muchas reglas de objetos calisténicos y viola la Ley Demeter.
Otro sería 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();
Pero no me siento cómodo con esta solución, que solo parece ser un "acceso de orden superior", como evitar el captador / configurador estándar con un método que solo tiene como objetivo coincidir con la ley de Demeter ...
Alguna idea ?