? 首先聲明本人是菜鳥一枚,老鳥們就手下留情放過我這個菜鳥,講的不對的地方請多多諒解,歡迎交流加Q2401911560;
? 前幾天總監(jiān)跟我講我們APP的代碼一點都不規(guī)范,小公司當然沒有那么多代碼規(guī)范,讓我想個辦法,來進行代碼抽離,也就是進行所謂的架構(gòu),我也在網(wǎng)上看了不少的關于架構(gòu)的好多東西,這些東西看著很吊的樣子,我自然是看不得特別的懂,所以也是一知半解的,只能根據(jù)我自己理解的邏輯來進行講解所謂的架構(gòu);
? ? 好了,不費話了,直接開始講我們APP的架構(gòu),我們早期的架構(gòu)是基于MVC的架構(gòu),后來演變成了MVC,MVP,MVVM的混合架構(gòu),萬變不離其宗,所有的架構(gòu)都是MVC的基礎上建立的;
? ? MVC
? ?蘋果最基礎的架構(gòu)模式,MVC我就不多講了,大家基本上都懂,不懂的話只能說你還沒有入門,我相信我這樣的菜鳥都懂MVC,相信你們也都懂;
? ? MVP
? ? M : 邏輯Model層
?? ?V : 視圖層
? ? P : protocol協(xié)議層
? ? Model層類似于MVVM的ViewModel,主要負責存儲抽象邏輯數(shù)據(jù),另外Model層主還有部分工作實現(xiàn)對應的協(xié)議層協(xié)議,提供協(xié)議對應的各種屬性以及服務。Model經(jīng)過協(xié)議層抽象約束,最后Model被抽象成具有統(tǒng)一抽象邏輯的業(yè)務場景,最終Model層在講數(shù)據(jù)交付整個MVC結(jié)構(gòu)繪制展示的時間,我們可以按照同一套抽象的邏輯標準去執(zhí)行。
? ? ?我覺得我們公司的MVP架構(gòu)不算是真正意義的MVP,我們只是把協(xié)議層的內(nèi)容,部分的抽取出來,生成一個對象進行所謂的遵守協(xié)議,完成V視圖層的數(shù)據(jù)的更改和更新;
? ? ?MVVM
? ? ?Model-View-ViewModel所謂的MVVM的架構(gòu),這個架構(gòu)最主要的內(nèi)容,我個人認為是在ViewModel中,在這里面更新了UI的布局,通過VM來通知控制器和View來進行數(shù)據(jù)的更新和界面的修改;
? ? ? view Model是一個放置用戶輸入驗證邏輯,視圖顯示邏輯,發(fā)起網(wǎng)絡請求和其他各種各樣的代碼的極好的地方。有一件事情不應歸入view Model,那就是任何視圖本身的引用。view Model的概念同時適用于于iOS和OS X。(換句話說,不要在view Model中使用 #import UIKit.h)
? ? ? ?由于展示邏輯(presentation logic)放在了view Model中(比如Model的值映射到一個格式化的字符串),視圖控制器本身就會不再臃腫。當你開始使用MVVM的最好方式是,可以先將一小部分邏輯放入視圖模型,然后當你逐漸習慣于使用這個范式的時候再遷移更多的邏輯到視圖模型中。