我正在开发一个用于编辑文档的MVC/MVP GUI。该文档具有树结构,其中一些节点表示文本,另一些节点表示图像。app模型还包括一个命令栈,其中的命令直接在模型上操作。
由于不同的节点具有完全不同的控件,因此我计划为每个节点实现单独的MVC/MVP三元组。我遇到麻烦的地方是如何同步创建和销毁对等的V和C组件。
我的想法是:
动态视图/控制器生成的一些常见模式或最佳实践是什么?
发布于 2009-03-09 19:41:33
我推荐在这个site上查看一些UI模式
至于你的具体问题,我会做以下几点
显示节点的表单将实现一个INodeView接口
INodeTreeForm接口的一种方法是能够添加单个节点。它将传递在NodeTreeScreen对象中创建的节点类。将有两个关键属性。第一个是节点的键,第二个是节点的类型。
您将以这样的方式添加节点,即在控件上有一个具有键的字段。
与INodeTreeForm接口一起,您将拥有一个INodeView接口。这将覆盖视图区域或您将切换的新窗体。
当您单击节点时,它会将关键字传递给NodeTreeScreen,后者会查看它是什么类型的节点。它有一个INodeView对象的集合。INodeView的属性之一是它是哪种类型的节点。
您检索到了正确的INodeView。您关闭当前的INodeview,将当前的INodeView设置为您检索到的节点,将节点传递给它,并告诉它确实会自动显示。
你可以选择INodeView将会做什么。您可以为每种不同的类型注册一个表单/控件。例如INodeViewText、INodeViewImage等,或者只有一个综合的INodeViewForm,让实现INodeView的对象来处理实际的绘图。
根据您的GUI工具包的不同,这可能意味着一个表单可以实现许多不同的接口。
至于添加、删除和创建节点,这将通过实现INodeTreeForm和NodeTreeScreen的表单之间的交互来完成。其中要做的事情是执行您已经创建的命令来修改模型。
通过实现接口背后的所有东西,您可以更改实现,而不会搞砸软件的其余部分。实现不同接口的对象可以在不影响其他对象的情况下进行更改,只要它们继续正确地实现接口即可。
这是Martin Fowler网站上被动视图的一个变体。
https://stackoverflow.com/questions/627625
复制相似问题