Мои коллеги говорят мне, что в методах получения и установки должно быть как можно меньше логики.
Тем не менее, я убежден, что многое может быть скрыто в методах получения и установки, чтобы защитить пользователей / программистов от деталей реализации.
Пример того, что я делаю:
public List<Stuff> getStuff()
{
if (stuff == null || cacheInvalid())
{
stuff = getStuffFromDatabase();
}
return stuff;
}
Пример того, как работа говорит мне делать вещи (они цитируют «Чистый код» от дяди Боба):
public List<Stuff> getStuff()
{
return stuff;
}
public void loadStuff()
{
stuff = getStuffFromDatabase();
}
Сколько логики уместно в сеттере / геттере? Какая польза от пустых методов получения и установки, кроме нарушения сокрытия данных?
public List<Stuff> getStuff() { return stuff; }
StuffGetter
интерфейс, реализуйте StuffComputer
вычисления, которые выполняют вычисления, и оберните его внутри объекта StuffCacher
, который отвечает либо за доступ к кешу, либо за переадресацию вызовов на тот, StuffComputer
который он переносит.