Mis compañeros de trabajo me dicen que debería haber la menor lógica posible en captadores y colocadores.
Sin embargo, estoy convencido de que se pueden ocultar muchas cosas en getters y setters para proteger a los usuarios / programadores de los detalles de implementación.
Un ejemplo de lo que hago:
public List<Stuff> getStuff()
{
if (stuff == null || cacheInvalid())
{
stuff = getStuffFromDatabase();
}
return stuff;
}
Un ejemplo de cómo el trabajo me dice que haga cosas (citan 'Código limpio' del tío Bob):
public List<Stuff> getStuff()
{
return stuff;
}
public void loadStuff()
{
stuff = getStuffFromDatabase();
}
¿Cuánta lógica es apropiada en un setter / getter? ¿De qué sirven los getters y setters vacíos, excepto una violación de la ocultación de datos?
public List<Stuff> getStuff() { return stuff; }
StuffGetter
interfaz, implemente una StuffComputer
que haga los cálculos y envuélvala dentro de un objeto de StuffCacher
, que es responsable de acceder a la memoria caché o reenviar llamadas a la StuffComputer
que se envuelve.