具有嵌套视图的MVC

时间:2014-05-13 10:03:30

标签: javascript model-view-controller separation-of-concerns architectural-patterns

考虑以下视图结构:

  • 布局视图
    • 地图视图
    • 列表视图
      • 项目视图
        • 列表视图
          • 项目视图
          • 项目视图
      • 项目视图
        • 列表视图
          • 项目视图
          • 项目视图

目前,我只有一个控制器用于整个结构。所有嵌套视图都通过冒泡事件与该控制器进行通信。

我想为每个级别创建一个控制器吗?我有什么作品,但我觉得我的布局视图和列表视图做得太多了 - 例如当控制器说“"这里是更新的项目列表(来自服务器)"”时,布局视图负责删除不属于新数据的地图标记,更新现有数据并添加新数据那些。同时,LayoutView的第一个ListView负责完成相同的操作,但对于它的项目。

为每个人创建一个控制器会更好吗?如果是这样,我该怎么办呢?布局视图是否应该注入ListController和MapController,这将负责构建子视图?

如果对技术感兴趣:这是针对JavaScript小部件的。

1 个答案:

答案 0 :(得分:0)

您仅列出了一组视图。如果您正在考虑实现基于MVC的窗口小部件库,则需要具有相应的模型和控制器。也就是说,对于您拥有的每个视图,您需要一个模型实例和一个控制器实例(您需要编写相应的类)。

例如,您将拥有ListModel,ListView和ListController类。您可能决定编写另一个名为List的类来将所有内容绑定在一起 - 这样您的应用程序的UI构建代码只是实例化List类并使用它。如果您愿意,可以减少课程数量。例如,您可能决定将View和Controller加入一个(因为视图和控制器之间的耦合很紧)。

同样,您将拥有ItemModel,ItemView和ItemController类(以及Item类)。

模型类将具有以相应视图类可用于呈现特定视图的方式将数据呈现给相应视图类的工具。控制器将知道如何解释在相应视图上发生的UI交互,并在相应的视图和相应的模型上调用方法。

要允许创建树层次结构,最好使用GoF合成模式。

作为MVC模式的替代方案,您可能希望查看责任分配策略不同的PAC模式。 MVC现在被广泛使用。