Mes collègues me disent qu'il devrait y avoir le moins de logique possible dans les getters et les setters.
Pourtant, je suis convaincu que beaucoup de choses peuvent être cachées dans les accesseurs et les installateurs pour protéger les utilisateurs / programmeurs des détails de la mise en œuvre.
Un exemple de ce que je fais:
public List<Stuff> getStuff()
{
if (stuff == null || cacheInvalid())
{
stuff = getStuffFromDatabase();
}
return stuff;
}
Un exemple de la façon dont le travail me dit de faire les choses (ils citent «Clean Code» de Oncle Bob):
public List<Stuff> getStuff()
{
return stuff;
}
public void loadStuff()
{
stuff = getStuffFromDatabase();
}
Combien de logique est appropriée dans un setter / getter? Quelle est l'utilisation de getters et de setters vides, sauf en cas de violation de la dissimulation de données?
public List<Stuff> getStuff() { return stuff; }
StuffGetter
interface, implémentez une StuffComputer
qui effectue les calculs et enveloppez-la dans un objet StuffCacher
qui est responsable de l’accès au cache ou du transfert des appels vers StuffComputer
celui qu’il encapsule.