淺析iOS程序設計模式(基於MVC)


       接觸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

三層開發  http://baike.baidu.com/link?url=9eOHD-1z9BUIxInOTlj4yna0KRILwQNXkPa-4LEPZhfjIoBzjyx6e6Au3SEvW-eqANLCTFVgqTtYMPbAhZRh2K


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM