Давайте возьмем этот класс дротиков:
class Subject {
String a;
String b;
String c;
}
Теперь я хочу использовать его через прокси-сервер для управления отложенной загрузкой и синхронизацией.
Я также хочу иметь значения по умолчанию для использования в качестве заполнителей, пока я загружаю реальные данные из net. Чтобы держать бедра опрятными и изолированными, я добавил еще один класс:
class Fallback implements Subject {
@override String a = 'a';
@override String b = 'b';
@override String c = 'c';
}
Теперь у меня есть все кирпичики, которые мне нужны, чтобы записать класс "прокси с резервным":
class Proxy implements Subject {
Subject model;
Subject fallback = Fallback();
Future<void> slowlyPopulateModel() async => if (model == null) ... // do some async stuff that valorize model
@override
String get a {
slowlyPopulateModel();
return model?.a ?? fallback.a;
}
@override
set a(String _a) {
model?.a = a;
notifyListener();
}
// same getters and setters for b and c
}
Переопределив get a
Я могу при необходимости вызвать метод медленного ввода-вывода и вернуть значение заполнителя моего Fallback
класса. Как только новое значение будет установлено, мое переопределенное значение set a(String _a)
вызовет notifyListener()
, что обновит мой интерфейс.
Это работает нормально, но я вручную переопределил getter и setter для каждого поля моего класса (а их много) ,
Есть ли у Дарта какой-нибудь трюк, чтобы сделать это более DRY способом?
Например, каким-то образом внедрить код, который будет выполняться до или после каждого метода получения или установки?