Backbone.js 带包的主干架构

Backbone.js 带包的主干架构,backbone.js,requirejs,marionette,Backbone.js,Requirejs,Marionette,我正在尝试选择一种最适合我的应用程序的主干架构 我正在构建一个大型应用程序,它将由几个可以启用或禁用的组件或“包”组成 为了简单起见,假设我的单页应用程序是一个包含多个组件的库,例如照片库和视频库 我的应用程序的任何“安装”都可以选择加载哪些组件(“软件包”)——视频、照片或两者兼而有之 视频和照片库有一些通用的代码和抽象类 我希望每个安装只在单个(优化)文件中加载所需的组件,这意味着如果安装只使用照片库,则不应加载视频库,以节省资源 我研究过各种解决方案,例如带有r优化器的requireJ

我正在尝试选择一种最适合我的应用程序的主干架构

我正在构建一个大型应用程序,它将由几个可以启用或禁用的组件或“包”组成

为了简单起见,假设我的单页应用程序是一个包含多个组件的库,例如照片库和视频库

  • 我的应用程序的任何“安装”都可以选择加载哪些组件(“软件包”)——视频、照片或两者兼而有之
  • 视频和照片库有一些通用的代码和抽象类
  • 我希望每个安装只在单个(优化)文件中加载所需的组件,这意味着如果安装只使用照片库,则不应加载视频库,以节省资源
我研究过各种解决方案,例如带有r优化器的requireJs、木偶和腰托,但每种解决方案都有一些缺点: *带有优化器或木偶的RequireJS-我看不出如何将文件分组到包中
*Lumbar-看起来它确实解决了我的大部分问题,但我几乎找不到任何文档或社区支持(在StackOverflow上几乎没有提到),所以我不知道我是否可以在大型软件项目中依赖它。

嗯,这当然是主观的,你有很多选择,但也许你的一些选择的一些背景信息会有所帮助,我会不遗余力地向你推荐

marionete
之所以好有很多原因,包括它是作为一个开源项目在Github上开发的。这意味着它是非常轻量级的,而且听起来你的麻烦来自它故意限制的特性集

Chaplin
是一个位于
Backbone.js
库之上的框架,类似于
marionete
和一些其他选项。两者都试图简化单页JavaScript应用程序的开发。在这样的应用程序中,客户机执行通常在服务器上执行的任务,例如将原始数据呈现为HTML

Backbone
本身被设计成一个极简主义的库,而不是一个功能齐全的框架<代码>骨干< /代码>只能提供JavaScript应用程序架构的基础。
提线木偶
卓别林
之所以出现,是因为
主干
为现实世界的应用程序提供的结构太少。他们对同样的问题作出反应。因此,两者之间有很多相似之处——也许不仅仅是差异

与木偶相比,卓别林更像一个框架。它更固执己见,在几个领域有更强大的惯例。它借鉴了服务器端MVC框架(如RubyonRails)的思想,这些框架遵循约定优先于配置的原则。卓别林的目标是提供行之有效的指导方针和便利的开发环境。 CoffeeScript和OOP

卓别林是用CoffeeScript编写的,CoffeeScript是一种编译成JavaScript的元语言。然而,卓别林的应用程序不必用咖啡脚本编写。最后,卓别林只是另一个JavaScript库

使用CoffeeScript是卓别林使应用程序开发更简单、更健壮的想法的一部分。CoffeeScript执行Douglas Crockford的《JavaScript——好的部分》一书中的指导原则。像木偶一样,卓别林也提倡ECMAScript 5严格模式

使用CoffeeScript,与主干的扩展功能相比,类声明和基于类的继承更加紧凑。当木偶网试图绕过超级调用时,卓别林接受方法重写,并试图使基于类的继承顺利工作。例如,如果在派生类及其超类上声明事件处理程序,则两者都将应用。 使用CommonJS或AMD进行模块化

卓别林要求您在CommonJS或AMD模块中构造JavaScript代码。每个模块都需要声明其依赖项,并可能导出一个值,例如构造函数或单个对象。在卓别林中,一个文件通常包含一个类并定义一个模块

通过将代码拆分为可重用模块并以机器可读的方式声明依赖项,可以自动加载和打包代码

使用AMD并不容易,您需要熟悉Require.js之类的加载程序和r.js之类的优化器。作为替代方案,您可以使用CommonJS模块格式和Brunch作为处理器

Chaplin
提供了一个非常固定的核心应用程序结构。它处理应用程序中的主流

The Application is the root class that starts the following parts
The Router replaces Backbone.Router
The Dispatcher starts and stops controllers when a route matches
The Layout is the top-level view that observes clicks on links
在卓别林中,有一个中心位置可以定义所有路线。路由指向控制器操作。例如,URL模式/cars/:id指向cars#show,这是CarsController的show方法

控制器是创建模型的地方。它还负责为主内容区域创建视图。因此,控制器通常代表应用程序界面的一个屏幕

卓别林的主要思想是一次性控制器。基本规则是:当另一个路由匹配时,将释放当前控制器及其所有子级(模型、集合、视图)。即使路由指向同一控制器的另一个操作,也会释放控制器实例并创建一个新实例

当另一个路由匹配时丢弃对象是清理引用的一个简单而有效的规则。当然,有些对象需要保留在内存中以便以后重用。
Chaplin.Composer
允许您以可控的方式共享模型和视图。您需要显式地将它们标记为可重用。如果保存的对象未在下一个控制器操作中重用,则会自动释放该对象

在卓别林应用程序中,每件物品都应该是一次性的。所有
Chaplin
类都有一个dispose方法,该方法将使对象不可用并切断所有连接

著名的