Model view controller 在MVC或MVP应用程序中创建视图和控制器有哪些模式?

Model view controller 在MVC或MVP应用程序中创建视图和控制器有哪些模式?,model-view-controller,controller,mvp,factory,presenter,Model View Controller,Controller,Mvp,Factory,Presenter,我正在开发一个用于编辑文档的MVC/MVP GUI。文档有一个树状结构,有些节点表示文本,有些节点表示图像。应用程序模型还包括一个命令堆栈,命令直接在模型上运行 由于不同的节点具有完全不同的控件,我计划为每个节点实现单独的MVC/MVP三元组。我遇到的麻烦是如何同步对等V和C组件的创建和销毁 我的想法: -在每个节点上侦听“childAdded”类型的事件,然后基于这些事件创建对等点 -使用工厂在模型中创建节点,并让该工厂也创建对等节点 动态视图/控制器生成的一些常见模式或最佳实践是什么?我建议

我正在开发一个用于编辑文档的MVC/MVP GUI。文档有一个树状结构,有些节点表示文本,有些节点表示图像。应用程序模型还包括一个命令堆栈,命令直接在模型上运行

由于不同的节点具有完全不同的控件,我计划为每个节点实现单独的MVC/MVP三元组。我遇到的麻烦是如何同步对等V和C组件的创建和销毁

我的想法:
-在每个节点上侦听“childAdded”类型的事件,然后基于这些事件创建对等点
-使用工厂在模型中创建节点,并让该工厂也创建对等节点


动态视图/控制器生成的一些常见模式或最佳实践是什么?

我建议现在看看一些UI模式

至于你的具体问题,我将做以下几点

显示节点的表单将实现INodeView接口

INodeTreeForm接口的一种方法是能够添加单个节点。它将传递在NodeTreeScreen对象中创建的节点类。将有两个关键属性。第一个是节点的键,第二个是节点的类型

您可以这样添加节点,即控件上有一个包含键的字段

除了INodeTreeForm接口,您还将拥有一个INodeView接口。这将覆盖视图区域或您将要切换的新表单

当您单击节点时,它会将键传递给NodeTreeScreen,它会查看节点的类型。它有一个INodeView对象的集合。INodeView的属性之一是它是哪种类型的节点

您检索到正确的INodeView。关闭当前INodeview,将当前INodeview设置为检索到的INodeview,将其传递给节点,并告诉它显示自己

你可以选择INodeView会说什么。您可以为每种不同类型注册一个表单/控件。例如,一个INodeViewText、INodeViewImage等,或者只是一个omnibus INodeViewForm,让实现INodeView的对象处理实际的图形

根据您的GUI工具包,这可能意味着一个表单可以实现许多不同的接口

至于添加、删除和创建节点,这将通过实现INodeTreeForm的表单和NodeTreeScreen之间的交互来完成。这将要做的事情之一是执行您已经创建的命令来修改模型

通过实现界面背后的每一件事情,您可以在不破坏软件其余部分的情况下更改实现。实现不同接口的对象可以更改,而不会影响其他对象,只要它们继续正确地实现接口

这是Martin Fowler网站上被动观点的一种变体