代码之家  ›  专栏  ›  技术社区  ›  Michael Brewer-Davis

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

  •  0
  • Michael Brewer-Davis  · 技术社区  · 16 年前

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

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

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

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   RS Conley    16 年前

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

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

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

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

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

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

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

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

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

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

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