【发布时间】:2014-06-30 22:48:54
【问题描述】:
考虑以下视图结构:
- 布局视图
- 地图视图
- 列表视图
- 项目视图
- 列表视图
- 项目视图
- 项目视图
- 列表视图
- 项目视图
- 列表视图
- 项目视图
- 项目视图
- 列表视图
- 项目视图
目前,我只有一个控制器用于整个结构。所有嵌套视图都通过冒泡事件与该控制器进行通信。
我想为每个关卡创建一个控制器吗?我有什么作品,但我觉得我的布局视图和列表视图做得太多了——例如当控制器说“这里是更新的项目列表(来自服务器)”时,布局视图负责删除不属于新数据的地图标记,更新现有的,并添加新的。同时,LayoutView 的第一个 ListView 负责做同样的事情,但它的项目。
为每个控制器创建一个控制器会更好吗?如果是这样,我会怎么做?布局视图是否应该注入一个 ListController 和一个 MapController 来负责构建子视图?
如果对技术感兴趣:这是针对 JavaScript 小部件的。
【问题讨论】:
-
这有点抽象,没有代码示例很难理解,所以我只能给你一个抽象的答案作为回报。如果您的控制器有很多方法/动作,那么如果它们都与相同的概念相关并且共享大量代码,那也没关系。如果你发现你的控制器使用了很多不同的视图模型,那么这是一个很好的迹象,表明是时候换一个控制器了。让您的设计由 SRP 和 DIP 原则驱动。
-
@JasonNesbitt 就像现在一样,所有由 LayoutView 管理的视图都使用 LayoutView 作为它们的“控制器”。
-
你最后做了什么?
-
我采用了我原来的结构,因为 pure MVC 对于一个应该包含的自包含小部件来说过于复杂 ->
myWidget.create({with: 'some options'})。跨度>
标签: javascript model-view-controller separation-of-concerns architectural-patterns