接觸iOS手機開發有一段時間了。總體來說,蘋果公司設計的開發環境還是非常人性化的。很容易上手,也方便深入。
在組織大型項目的代碼文件時,我們常用MVC的思想。MVC的概念講起來非常簡單,就和對象(object)一樣。但是理解和應用起來卻非常困難。今天我們就試着探討一下MVC設計理念。
M是指業務模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式。
比如一批統計數據可以分別用柱狀圖、餅圖來表示。
C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。
再實際開發中,M雖然本意是業務模型,但通常被理解為數據庫操作層。
V即界面層,這個沒有異議。
C則被理解為業務層。
對應在ios中,V就是指.xib文件。C是指.m文件。但是,通常情況並不如我們想像的這么理想。因為客戶的需求是千變萬化的。很多時候,我們需要根據客戶的需求對界面進行自定義。所以,很多時候界面代碼和會混淆在.m文件中和控制層代碼摻雜在一起。
在我個人的設想中,MVC這三層分別要完成哪些工作呢?
1、M層 模型(更多的是數據庫模型)
(1)創建數據庫、創建相應的表
(2)完成針對數據庫各個表的增、刪、改、查的操作類
(3)映射數據庫各個表的實體類(這個實體類的作用就是溝通數據庫層(M)和控制層(C)的橋梁,同時這個實體類也將擔負其后台數據(xml、sbjson等)與本地數據的溝通和存儲)
本層要實現的功能:
(1)
本層輸入件:sql增加或插入數據庫表對應的實體類的對象的語句
本層輸出件:增加、或插入數據庫
(2)
本層輸入件:sql查詢語句
本層輸出件:返回存儲實體類對象的數組
(3)
本層輸入件:sql刪除語句
本層輸出件:刪除數據庫中的指定信息
2、V層 視圖
不用多講了,在ios中,這個層主要由.xib文件完成。如果客戶由自定義需求,則在.m文件中實現。
本層實現的功能就是控件的布局。
3、C層 控制
這個層的意義就在於確保M和V的同步。我個人理解,這層不僅叫控制層,更應該叫業務層。
本層要實現的功能:
(1)
本層輸入件:界面控件中數據和事件
本層輸出件:
第一:調用M層的接口,更新M層(數據庫)中的數據
第二:調用V層的接口,更新V層(界面)中的數據
在現實的開發過程中,代碼真的就這么清晰地分成以上三種嗎?
現實中,工程中還有以下幾種類型的代碼:
(1)接口文件[數據操作]
(2)解析通過接口獲取的數據[數據操作]
(3)開源框架(實現各種界面效果、解析各種數據)[數據操作+V顯示]
(4)工具類(比如為圖片增加圓角、實現checkbox、實現各種頁面效果、數據加密解密)[數據操作+V顯示]
(5)本項目提煉的公用類(如驗證、升級檢測、數據更新等)[數據操作M]
業務層BusinessLayer:
可以調用:數據層
可以被調用:控制層
組織當前軟件獨特的業務體系,只處理數據,和數據層和控制層有關系,和界面層沒有任何關系。
常見業務:
(1)數據同步(用到數據層數據操作和界面層的數據)
(2)軟件升級
(3)登錄驗證
(4)賬號有效性驗證
控制層ControllerLayer:只負責數據層和界面層的數據同步(通過業務層來實現)
數據層DataLayer:只和數據打交道,和業務毫無關系
界面層ViewLevel:只和界面打交道,和控制層打交道,和其他層毫無關系
上面寫的比較亂,來張圖,看看能不能捋清楚,知道我們在實際編碼過程中組織各種代碼和文件:
用MVC思想重構一個項目的核心就是剝離出這個項目的業務邏輯。
什么是項目的業務邏輯?所謂業務邏輯關注點主要集中在業務規則的制定、業務流程的實現等與業務需求有關的系統設計。簡而言之,所謂業務邏輯就是指業務規則。凡事有規則的東西,就是業務邏輯,沒有規則的東西就不是業務邏輯。
利用MVC思想組織的文件結構一例:
參考:
用自己的話講對mvc的理解,直觀 http://hi.baidu.com/javvinnet/item/c231542073c3f851c38d5944
對mvc專業的解釋: http://www.cnblogs.com/shanyou/archive/2010/04/03/1703501.html