Moi współpracownicy mówią mi, że w getterach i seterach powinna być jak najmniej logiki.
Jestem jednak przekonany, że w programach pobierających i ustawiających można ukryć wiele rzeczy, aby chronić użytkowników / programistów przed szczegółami implementacji.
Przykład tego, co robię:
public List<Stuff> getStuff()
{
if (stuff == null || cacheInvalid())
{
stuff = getStuffFromDatabase();
}
return stuff;
}
Przykład tego, jak praca każe mi robić różne rzeczy (cytują „Czysty kod” od wuja Boba):
public List<Stuff> getStuff()
{
return stuff;
}
public void loadStuff()
{
stuff = getStuffFromDatabase();
}
Jaka logika jest odpowiednia w seter / getter? Jaki jest pożytek z pustych programów pobierających i ustawiających oprócz naruszenia ukrywania danych?
public List<Stuff> getStuff() { return stuff; }
StuffGetter
interfejs, zaimplementuj StuffComputer
obliczenia i zawiń go w obiekcie StuffCacher
, który jest odpowiedzialny za dostęp do pamięci podręcznej lub przekazywanie wywołań do tego StuffComputer
, co otacza.