在MVC或MVP应用程序中创建视图和控制器有哪些模式?
-
06-07-2019 - |
题
我正在使用MVC / MVP GUI来编辑文档。该文档具有树结构,其中一些节点表示文本,另一些节点表示其他图像。应用程序模型还包括一个命令堆栈,命令直接在模型上运行。
由于不同的节点具有完全不同的控件,我计划为每个节点实现单独的MVC / MVP三元组。我遇到麻烦的地方是如何同步对等V和C组件的创建和销毁。
我的想法:
- 在每个节点上监听“childAdded”键入事件,然后根据这些事件创建对等体
- 使用工厂在模型中创建节点,并让该工厂也创建对等
动态视图/控制器生成有哪些常见模式或最佳实践?
解决方案
我建议您在此网站上查看一些UI模式
至于你的具体问题,我会做以下
显示节点的表单将实现INodeView接口
INodeTreeForm接口的一个方法是添加单个节点的能力。它将传递在NodeTreeScreen对象中创建的Node类。将有两个关键属性。第一个是节点的密钥,第二个是节点的类型。
您将添加节点,使控件上有一个包含密钥的字段。
与INodeTreeForm接口一起,您将拥有一个INodeView接口。这将涵盖您将要切换的视图区域或新表单。
当您单击节点时,它会将密钥传递给NodeTreeScreen,后者会查看它是什么类型的节点。它有一组INodeView对象。 INodeView的一个属性是它是哪种类型的节点。
您检索正确的INodeView。关闭当前的INodeview,将当前的INodeView设置为您检索的INodeView,将其传递给节点,并告诉它自己显示。
您可以选择INodeView会说什么。您可以为每种不同类型注册一个表单/控件。例如,一个INodeViewText,INodeViewImage等。或者只是一个综合的INodeViewForm,让实现INodeView的对象负责实际的绘图。
根据您的GUI工具包,这可能意味着一个表单可能实现了许多不同的接口。
对于添加,删除和创建节点,这可以通过实现INodeTreeForm和NodeTreeScreen的表单之间的交互来完成。这将要做的事情是执行你已经创建的命令来修改模型。
通过实现界面背后的每一件事,您可以更改实施,而无需搞砸其余的软件。实现不同接口的对象可以在不影响其他对象的情况下进行更改,只要它们继续正确实现接口即可。
这是Martin Fowler网站上Passive View的变种。