作者: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的架構、能做什么、不能做什么、以及還能擴展什么。