ObservableTracker из JFace.Databinding,
демонстрирует интересную технику автоматического подписывания observer'ов.
final IObservableValue firstName = SWTObservables.observeText(firstNameField, SWT.Modify);
final IObservableValue lastName = SWTObservables.observeText(lastNameField, SWT.Modify);
IObservableValue formattedName = new ComputedValue() {
protected Object calculate() {
return lastName.getValue() + firstName.getValue();
}
};
Код фактически работает в двух режимах, первый раз - мета прогон, чтобы фреймворк мог узнать от каких полей зависит вычисляемое значение, чтобы потом при появлении этих событий синхронизировать в том числе и вычисленное значение.
Это как ячейки в электронной таблице. Полноценная реализация данной концепции есть ввиде
расширения CLOS. В Lisp никакого метапрогона кода за счет специальных обозначений не требуется.
У реализации Cell's на
python есть несколько proof-of-concept демок, показывающих как можно было бы использовать Cells при разработке пользовательского интерфейса, веб сайта или общения с бд.
Интересно, было бы подумать насчет декларативного контроля распростронения изменений между группами ячеек.
Update 19.09.2008 В
JavaFX Cells это уже часть языка. Но я не понимаю, зачем они все реализуют lazy cells, совместно с тригеррами, это же прямо идеальный способ создавать сложнодетектируемые баги.
Update 23.09.2008 Очень серьезная реализация концепции Cells -
PEAK-Trellis. C транзакциями, и детектированием циклических зависимостей. Правда api красотой и элегантностью не блещут.