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