Какие существуют шаблоны для создания представлений и контроллеров в приложении MVC или MVP? - PullRequest
0 голосов
/ 09 марта 2009

Я работаю над графическим интерфейсом MVC / MVP для редактирования документа. Документ имеет древовидную структуру: некоторые узлы представляют текст, другие - изображения. Модель приложения также включает стек команд с командами, работающими непосредственно с моделью.

Поскольку разные узлы имеют радикально разные элементы управления, я планирую реализовать отдельные триады MVC / MVP для каждого узла. У меня проблемы с синхронизацией создания и уничтожения одноранговых компонентов V и C.

Мои идеи:
- прослушивать на каждом узле события типа childAdded, а затем создавать одноранговые узлы на основе этих событий
- используйте фабрику для создания узлов в модели, и пусть эта фабрика также создаст одноранговые узлы

Каковы некоторые распространенные шаблоны или рекомендации для динамического представления / генерации контроллера?

1 Ответ

1 голос
/ 09 марта 2009

Я рекомендую взглянуть на некоторые шаблоны пользовательского интерфейса на этом сайте

Что касается вашего конкретного вопроса, я бы сделал следующее

Форма, отображающая узлы, будет реализовывать интерфейс INodeView

Одним из методов интерфейса INodeTreeForm является возможность добавления отдельного узла. Это будет передача класса Node, созданного в объекте NodeTreeScreen. Там будет два ключевых свойства. Первый - это ключ узла, а второй - тип узла.

Вы бы добавили узел таким образом, чтобы в элементе управления было поле с ключом.

Наряду с интерфейсом INodeTreeForm у вас будет интерфейс INodeView. Это будет охватывать область просмотра или новую форму, которую вы тоже будете переключать.

Когда вы щелкаете по узлу, он передает ключ на NodeTreeScreen, который определяет, какой это тип узла. Он имеет коллекцию объектов INodeView. Одним из свойств INodeView будет тип узла.

Вы получаете правильный INodeView. Вы закрываете текущий INodeview, устанавливаете текущий INodeView на тот, который вы получили, передаете ему узел и говорите, что он отображает сам.

У вас есть выбор относительно того, что будет делать INodeView. Вы можете зарегистрировать форму / элемент управления для каждого типа. Например, INodeViewText, INodeViewImage и т. Д. Или только один сводный INodeViewForm, и пусть объект, реализующий INodeView, позаботится о реальном чертеже.

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

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

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

Это вариант пассивного просмотра на сайте Мартина Фаулера.

...