Meus colegas de trabalho me dizem que deve haver o mínimo de lógica possível em getters e setters.
No entanto, estou convencido de que muitas coisas podem ser ocultadas nos getters e setters para proteger os usuários / programadores dos detalhes da implementação.
Um exemplo do que faço:
public List<Stuff> getStuff()
{
if (stuff == null || cacheInvalid())
{
stuff = getStuffFromDatabase();
}
return stuff;
}
Um exemplo de como o trabalho me diz para fazer as coisas (elas citam 'Código Limpo' do tio Bob):
public List<Stuff> getStuff()
{
return stuff;
}
public void loadStuff()
{
stuff = getStuffFromDatabase();
}
Quanta lógica é apropriada em um setter / getter? Qual é a utilidade de getters e setters vazios, exceto uma violação da ocultação de dados?
public List<Stuff> getStuff() { return stuff; }
StuffGetter
interface, implemente uma StuffComputer
que faça os cálculos e envolva-a em um objeto de StuffCacher
, responsável por acessar o cache ou encaminhar chamadas para o StuffComputer
que ele envolve.