Какие существуют шаблоны для создания представлений и контроллеров в приложении MVC или MVP?

StackOverflow https://stackoverflow.com/questions/627625

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top