[原创]Backbone源码分析-JSMVC
作者:nuysoft/高云/nuysoft@gmail.com
声明:本文为原创文章,如需转载,请注明来源并保留原文链接。
接上一篇MVC模型的讨论
JSMVC职责划分
M 模型
- 业务模型:业务逻辑、流程、状态、规则
- (核心)数据模型:业务数据、数据校验、增删改查(AJAX)
V 视图
- (核心)视图:定义、管理、配置
- 模板:定义、配置、管理
- 组件:定义、配置、管理
- (核心)用户事件配置、管理
- 用户输入校验、配置、管理
C 控制器/分发器
- (核心)事件分发、模型分发、视图分发
- 不做数据处理、业务处理,即业务无关
- 扩展:权限控制、异常处理等
- C是JSMVC框架的核心,实现集中式配置和管理,可以有多个控制器
工具库
- 主要是异步请求、DOM操作,可以依赖于jQuery等
JSMVC实现探讨
MVC的模型Model、视图View、控制器Control三个相互独立又相互联系,C作为其中的桥梁。MVC作为由来已久的成熟开发模型,已经有经典的实现可控参考,在浏览器和JS这个特定应用场景中,我们做如下探讨:
M模型是自包含的,可以嵌套包含,不会主动引用视图和控制器;可以是简单的JSON对象/数组,也可以用组合模式Composite实现嵌套包含;
V视图是嵌套包含的,可以用组合Composite实现;视图需要引用模型(M-V),一个视图引用一个多个视图,视图会收到模型的通知并自动更新,可以用观察者模式Observer实现;视图需要响应用户的交互,使用浏览器事件模型;
C控制器作为MVC框架关注的核心,采取集中配置的策略(V-C);可以有多个控制器(C+C),用策略模式Strategy实现;hash事件驱动需要用到浏览器事件模型。
可以看到M模型和C控制器之间没有关联,一般我认为是不需要的;但是在有的框架中实现了M模型和C控制器事件的关联(比如公司在用的Magix),也是一种实践,可以参考。
上边的论述解析MVC在JS中定位,但是理解JSMVC如何运行的关键在于对事件驱动的理解。
事件驱动
在浏览器中JSMVC有三种事件驱动方式:
1. hash驱动,通过popstate/hashchange事件驱动控制器(前边有过介绍,后续结合Backbone的Router和History详细讲解它原理、实现、技巧)
2. DOM事件,用来驱动视图(这个我们已经很熟悉了)
3. 模型事件(业务模型事件和数据模型事件),用来驱动模型和模型结合(这个后续结合Backbone的Model讲解)
今天就写到这里,下节介绍Backbone的架构、能做什么、不能做什么、以及还能扩展什么。