【问题标题】:What are some patterns for creating views and controllers in an MVC or MVP app?在 MVC 或 MVP 应用程序中创建视图和控制器有哪些模式?
【发布时间】:2009-03-09 19:13:52
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: model-view-controller controller mvp factory presenter


    【解决方案1】:

    我建议在site 上查看一些 UI 模式

    至于你的具体问题,我会做以下事情

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

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

    您将添加节点,使控件上有一个具有键的字段。

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

    当您单击节点时,它会将密钥传递给 NodeTreeScreen,它倾向于查看它是什么类型的节点。它有一组 INodeView 对象。 INodeView 的属性之一将是它是哪种类型的节点。

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

    您可以选择 INodeView 将要执行的操作。您可以为每种不同类型注册一个表单/控件。例如 INodeViewText、INodeViewImage 等。或者只是一个综合 INodeViewForm,让实现 INodeView 的对象负责实际绘图。

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

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

    通过实现接口背后的所有内容,您可以更改实现,而不会搞砸软件的其余部分。实现不同接口的对象可以更改,而不会影响其他对象,只要它们继续正确实现接口。

    这是 Martin Fowler 网站上被动视图的变体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      相关资源
      最近更新 更多