Я хотел бы реализовать шаблон наблюдателя в Дарт, но я не уверен, как это сделать.Реализовать шаблон наблюдателя в Dart
Скажем, у меня есть класс:
class MyClass {
String observed_field;
}
Теперь, когда я изменить поле, я хотел бы напечатать «observed_field изменил» строку в консоль. Довольно просто сделать с помощью пользовательского сеттер:
class MyClass {
String _observed_field;
get observed_field => _observed_field;
set observed_field(v) {
_observed_field = v;
print("observed_field changed");
}
}
Теперь, конечно, если у меня есть не один, а многие из этих полей, я не хотел бы, чтобы создать все эти методы получения и установки. Очевидным теоретическое решение, что они динамически добавляются в класс с чем-то вроде этого (не рабочий код, просто пример того, как я хочу это выглядело):
class MyClass
String _observeable_field;
String _observeable_field_2;
observe(#observeable_field, #observeable_field_2);
end
Возможно ли это? Кроме того, было бы супер удивительным, чтобы не иметь те поля, определенные выше observe()
вызова, а написать что-то вроде:
observe(String: #_observeable_field, String: #_observeable_field_2);
Так что эти поля объявляются автоматически.
Я прочитал еще один вопрос о SO и было предложено использовать этот пакет 'Observe'. Однако мне не понравилось, что вам действительно нужно было вызвать 'Observable.dirtyCheck()' для того, чтобы изменения были доставлены. Этот вид отрицает всю точку зрения на что-то, если вам все-таки пришлось, в основном, проверить изменения вручную. – snitko
Если вы посмотрите на пример в документах API, он показывает, как вы можете избежать dirtyCheck(), используя @reflectable annotation и notifyPropertyChange(). Это более похоже на ваш пример. http://api.dartlang.org/docs/channels/stable/latest/observe.html –
Отлично, я благодарю вас. – snitko