我正在构建我的第一个backbone.marionette应用程序,有些事情让我感到困惑。
在TodoMVC的backbone.marionette版本中,似乎有两个不同的模块执行App的工作:
首先是TodoMVC,它是Backbone.Marionette.Application的一个实例,然后有TodoMVC.TodoList,它似乎只是一个容纳控制器和路由器的容器。
为什么控制器对象不能简单地添加到App对象中?
让我困惑的另一件事: 在我在堆栈溢出中讨论过的其他木偶应用程序中,例如this one,在app对象上调用了addInitializer(),但在TodoMVC应用程序中,在todolist对象上调用了addInitializer()。
这是否特定于想要拥有控制器对象的应用程序?
我也发现命名相当混乱,因为TodoMVC(app)和Todolist(控制器容器?)都有名称暗示他们是 基础应用程序。 Todolist模块在语义上可以称为TodoController吗?
答案 0 :(得分:2)
为什么控制器对象不能简单地添加到App对象中?
这是一个与Single Responsibility Principle相关的模块化设计选择。 TodoMVC是顶级应用程序,TodoList是我们应用程序中的模块(或子应用程序),它们都倾向于自己的花园。这使我们可以在不增加顶级应用程序代码的情况下制作任意数量的模块。
在其他木偶应用程序中...在app对象上调用addInitializer(),但在TodoMVC应用程序中,在todolist对象上调用addInitializer()
我认为这只是Application.Modules的惯例问题。 TodoMVC应用程序不需要任何初始化代码,因此我们不添加init函数。