考虑以下视图结构:
- 布局视图
- 地图视图
- 列表视图
- 项目视图
- 列表视图
- <
- 项目视图/gh><
- 项目视图/gh>
- 列表视图
- 项目视图
- 列表视图
- <
- 项目视图/gh><
- 项目视图/gh>
- 列表视图
- 项目视图
目前,整个结构只有一个控制器。所有嵌套视图都通过冒泡事件与控制器通信。
我是否想为每个关卡创建一个控制器?我得到的作品,但我觉得我的布局视图和列表视图做得太多-例如,当控制器说"这里是一个更新的项目列表(从服务器)",布局视图负责删除地图标记,不是新数据的一部分,更新现有的,并添加新的。与此同时,LayoutView的第一个ListView负责做完全相同的事情,但对于它的项目。
为每个人创建一个控制器会更好吗?如果有,我该怎么做呢?布局视图是否应该注入一个ListController和一个MapController,它们将负责构造子视图?
如果技术感兴趣:这是一个JavaScript小部件
您只列出了一个视图集合。如果您正在考虑实现基于MVC的小部件库,则需要有相应的模型和控制器。也就是说,对于你拥有的每个视图,你需要有一个模型实例和一个控制器实例(你需要有相应的类编码)。
例如,你将有ListModel, ListView和ListController类。您可能决定编写另一个名为List的类来将所有内容绑定在一起——这样应用程序的UI构建代码就可以简单地实例化List类并使用它。如果你愿意,你可以减少课程的数量。例如,你可能决定将视图和控制器合并为一个(因为视图和控制器之间的耦合很紧密)。
类似地,你将有ItemModel, ItemView和ItemController类(还有一个Item类)。
模型类将能够以相应的视图类可以用来呈现特定视图的方式将数据呈现给相应的视图类。控制器将知道如何解释发生在相应视图上的UI交互,并调用相应视图和相应模型上的方法。
为了允许创建树形层次结构,您最好使用GoF组合模式。
除了MVC模式之外,您可能希望查看PAC模式,其中职责分配策略是不同的。