Параметры для синхронизации моделей и пользовательского интерфейса (в контексте приложения для настольного компьютера) - PullRequest
3 голосов
/ 12 марта 2010

По моему опыту, для разработки крупномасштабных настольных приложений работало только 2 шаблона при попытке синхронизации модели и пользовательского интерфейса.

1 - Подход с использованием EventBus через общие объекты команд EventBus запускаются (т. Е. UserDemographicsUpdatedEvent) и имеют различные части обновления пользовательского интерфейса, если они связаны с одним и тем же объектом пользователя, обновленным в этом событии.

2-Попытка привязать пользовательский интерфейс напрямую к модели, добавляя при необходимости слушателей к самой модели. Я считаю этот подход довольно неуклюжим, поскольку он загрязняет модель предметной области.

У кого-нибудь есть другие предложения? В веб-приложении с чем-то вроде JSP привязка к модели проста, так как обычно вы заботитесь только о состоянии модели в момент поступления запроса, а не в приложении типа настольного компьютера.

Есть идеи?

1 Ответ

2 голосов
/ 18 марта 2010

В настоящее время я использую подход шины событий для синхронизации моделей и пользовательского интерфейса в моем приложении, но я столкнулся с препятствием в том, что трудно сделать его очень детализированным, например, на уровне свойств, где вы просто интересно узнать, обновляется ли свойство x объекта, и существуют сотни или тысячи таких случаев.

Для такого мелкозернистого элемента управления вы можете проверить, как KVC (Key Value Coding) и KVO (Key Value Наблюдение) работают в Какао. Это в основном позволяет объекту наблюдать свойства любого другого объекта, если он использует некоторые основные принципы KVC. Заинтересованные объекты автоматически получают уведомление об изменениях, и вам не нужно явно уведомлять наблюдающие объекты о каждом изменении свойства, поскольку об этом заботится базовая реализация KVO. Это несколько похоже на прослушиватели PropertyChange в Java-бинах.

Если происходит слишком много наблюдений, и написание связующего кода для обновления моделей / представлений об изменениях свойств становится проблематичным, возможно, вы захотите сделать еще один шаг и иметь привязку данных для сохранения модели и виды синхронизированы. В основе концепции KVO лежит идея связать свойства объектов, чтобы изменение одного из них автоматически обновляло другое, и наоборот. Например, вы можете привязать текст в поле ответа SO к предварительному просмотру ответа, который мы видим ниже.

.bind('answer.value', 'answerPreview.text')

В этом случае оба элемента являются элементами представления, поэтому привязка данных является общим подходом и может использоваться для более точного связывания объектов, а не только пользовательского интерфейса с моделями.

...