Для традиционных приложений, которые запускаются на рабочем столе компьютера, я рекомендую варианты Passive View . Класс, отвечающий за создание и управление формой, представляет собой тонкую оболочку, которая передает события в объект пользовательского интерфейса. UI_Object взаимодействует с формой через интерфейс. Термин UI Object реализует интерфейс UI_View и регистрируется в View Controller, который расположен ниже в иерархии объектов.
Затем UI_Object выполняет объект, реализующий Шаблон команды , который модифицирует модель. Командный объект может взаимодействовать с различными представлениями через интерфейсы, предоставляемые элементом управления представлением.
Это позволяет вам разорвать классы форм и заменить их классами-заглушками, которые реализуют интерфейсы форм. Классы-заглушки используются для автоматического тестирования, особенно для интеграционных тестов.
Интерфейсы точно определяют взаимодействие между формой, UI_Object, командами и представлениями. Они могут быть разработаны так, чтобы быть относительно независимыми от языка, чтобы облегчить перенос между платформами.
В вашем примере вам не хватает командных объектов. Вам нужна эта структура
- ItemViewForms
- ItemViewImplementation
- ItemViewFormInterface
- ItemViewCommands
- ItemViewInterface
- MyModel
Включение ItemList в ItemViewImplementation
ItemComponent будет регистрироваться в ItemViewImplementation с использованием ItemViewInterface.
Последовательность событий будет выглядеть примерно так
- Пользователь хочет обновить элемент
- Клики по пользовательскому интерфейсу (при условии, что пользовательский интерфейс
включает в себя щелчок мышью)
- Форма сообщает
ItemViewImplementation через
ItemViewInterface, что X был
сделано с параметрами Y.
- ItemViewImplementation затем
создает объект команды с
необходимые параметры от Y.
- Командный объект взять Y
Параметры изменяет модель и
затем говорит
- ItemViewImplementation через
ItemViewInterface для обновления пользовательского интерфейса.
- ItemViewImplementation сообщает
ItemViewForms для обновления пользовательского интерфейса
через ItemViewFormInterface.
- Обновление ItemViewForms.
Преимущество этого подхода состоит в том, что взаимодействие каждого уровня точно определяется через интерфейсы. Программные ДЕЙСТВИЯ локализованы в объектах команд. Слои формы ориентированы на отображение результата. Уровень View отвечает за маршрутизацию действий и ответов между командами и формами. Команды - единственное, что изменяет модель. Кроме того, у вас есть преимущество в том, чтобы отрывать реализацию форм для замены любого пользовательского интерфейса, который вы хотите, включая фиктивный объект для модульного тестирования.