2009-03-09 6 views
0

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

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

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

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

ответ

1

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

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

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

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

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

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

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

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

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^