Я рекомендую посмотреть на некоторых из шаблонов пользовательского интерфейса в этом site
Что касается вашего конкретного вопроса я хотел бы сделать следующее
Формы отображения узлов будет реализовать метод INodeView интерфейс
One интерфейса INodeTreeForm будет возможность добавлять отдельный узел. Он будет передавать класс Node, созданный в объекте NodeTreeScreen. Будет два ключевых свойства. Первый - это ключ узла, а второй - тип узла.
Вы должны добавить узел таким образом, чтобы на элементе управления было поле, в котором есть ключ.
Наряду с интерфейсом INodeTreeForm у вас будет интерфейс INodeView. Это будет охватывать область просмотра или новую форму, которую вы тоже будете переключать.
Когда вы нажимаете на узел, он передает ключ в NodeTreeScreen, который смотрит на какой тип узла он есть. Он имеет набор объектов INodeView. Одним из свойств INodeView будет тот тип узла, которым он является.
Вы извлекаете правый INodeView. Вы закрываете текущий INodeview, устанавливаете текущий INodeView в тот, который вы получили, передаете ему узел и говорите, что он сам отображался.
У вас есть выбор относительно того, что будет говорить INodeView. У вас может быть форма/контроль, зарегистрированный для каждого из разных типов. Например, INodeViewText, INodeViewImage и т. Д. Или только один всемогущий INodeViewForm и пусть объект, реализующий INodeView, позаботится о фактическом чертеже.
В зависимости от вашего инструментария GUI это может означать, что в одной форме может быть реализовано множество разных интерфейсов.
Что касается добавления, удаления и создания узлов, это было бы сделано путем взаимодействия между формой, реализующей INodeTreeForm и NodeTreeScreen. Среди вещей, которые это будет делать, - выполнение команд, которые вы уже создали для изменения модели.
Внедряя все, что стоит за интерфейсом, вы можете изменить реализацию, не нажимая остальную часть программного обеспечения. Объект, реализующий разные интерфейсы, может меняться без воздействия на другие объекты, пока они продолжают правильно реализовывать интерфейсы.
Это вариант Пассивного просмотра на сайте Мартина Фаулера.