架構(gòu)(上)

MVC:?Modal View Controller

軟件架構(gòu)的七大原則:開一單脏毯,結(jié)合迪麗熱巴

1.開閉原則 :對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉

2.依賴倒置原則 :實(shí)現(xiàn)盡量依賴抽象盹沈,不依賴具體實(shí)現(xiàn)

3.單一職責(zé)原則 :一個(gè)類硼控,接口痊项,方法職責(zé)盡量單一

4.接口隔離原則 :客戶端不應(yīng)該依賴它不需要的接口,類之間的依賴關(guān)系應(yīng)該建立在最小接口上

5.合成/聚合復(fù)用原則 :盡量使用對(duì)象組合/聚合萝喘,而不是繼承關(guān)系達(dá)到軟件復(fù)用的目的

6.迪米特法則(最小知道原則):一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象保持最小的了解淮逻,盡量降低類與類之間的耦合

7.里氏替換原則:一個(gè)軟件實(shí)體如果適用一個(gè)父類的話,那一定是適用于其子類阁簸,所有引用弗雷的地方必須能透明地使用其子類的對(duì)象爬早,子類對(duì)象能夠替換父類對(duì)象,而程序邏輯不變



軟件架構(gòu)七大原則


不管我們選擇何種架構(gòu)模式启妹,我們都是朝著代碼的可擴(kuò)展性筛严、可維護(hù)性復(fù)用性饶米、可讀性去的桨啃。我們最終的目的都是為了降低代碼的耦合性,方便后續(xù)的修改檬输、擴(kuò)展和維護(hù)照瘾。

MVVM模式MVC模式最大的特點(diǎn)并不是降低了VC中代碼的臃腫,而是MVMM架構(gòu)模式把業(yè)務(wù)邏輯統(tǒng)一到了VM中處理丧慈,方便單元測(cè)試和自動(dòng)化測(cè)試网杆。



MVC自身不足

1)MVC 在現(xiàn)實(shí)應(yīng)用中的不足:

2)愈發(fā)笨重的 Controller:(UI更新,業(yè)務(wù)邏輯伊滋,網(wǎng)絡(luò))

3)太過于輕量級(jí)的 Model

4)遺失的網(wǎng)絡(luò)邏輯:

5)較差的可測(cè)試性:


?二:MVP:Modal View Presenter(模型 視圖 協(xié)調(diào)器)


MVP即Modal View Presenter(模型 視圖 協(xié)調(diào)器)碳却,MVP實(shí)現(xiàn)了Cocoa的MVC的愿景。MVP的協(xié)調(diào)器Presenter并沒有對(duì)ViewController的聲明周期做任何改變笑旺,因此View可以很容易的被模擬出來昼浦。在Presenter中根本沒有和布局有關(guān)的代碼,但是它卻負(fù)責(zé)更新View的數(shù)據(jù)和狀態(tài)筒主。

MVC和MVP的區(qū)別就是关噪,在MVP中M和V沒有直接通信。

1)MVP模式下的三個(gè)特性的分析:

任務(wù)均攤 -- 我們將最主要的任務(wù)劃分到 Presenter 和 Model乌妙,而 View 的功能較少使兔;

可測(cè)試性 -- 非常好,由于一個(gè)功能簡(jiǎn)單的 View 層藤韵,所以測(cè)試大多數(shù)業(yè)務(wù)邏輯也變得簡(jiǎn)單虐沥;

易用性 -- 代碼量比 MVC 模式的大,但同時(shí) MVP 的概念卻非常清晰。


1欲险、Model 層應(yīng)該不僅僅是創(chuàng)建一個(gè)數(shù)據(jù)對(duì)象镐依,還應(yīng)該包含網(wǎng)絡(luò)請(qǐng)求,以及數(shù)據(jù) SQLite 的 CRUD 操作天试。一般可以將數(shù)據(jù)對(duì)象是否需要緩存設(shè)計(jì)成一個(gè)字段 isCache槐壳,或者針對(duì)整個(gè)項(xiàng)目設(shè)計(jì)一個(gè)開存儲(chǔ)關(guān),決定整個(gè)項(xiàng)目是否需要數(shù)據(jù)緩存喜每。

2务唐、View 層比較簡(jiǎn)單明,就是 View 的一些封裝带兜、重用绍哎。在一款精心設(shè)計(jì)過的 App 里面,應(yīng)該有很多 View 是可以封裝重用的鞋真。

3崇堰、Presenter 層并不涉及數(shù)據(jù)對(duì)象的網(wǎng)絡(luò)請(qǐng)求和 SQLite 操作,只是 Model 層和 View 層的一個(gè)橋梁涩咖。Presenter 層就不至于太臃腫海诲,容易看懂。

4)MVP的優(yōu)勢(shì)

模型與視圖完全分離檩互,我們可以修改視圖而不影響模型

可以更高效地使用模型特幔,因?yàn)樗缘慕换ザ及l(fā)生在一個(gè)地方——Presenter內(nèi)部

我們可以將一個(gè)Presener用于多個(gè)視圖,而不需要改變Presenter的邏輯闸昨。這個(gè)特性非常的有用蚯斯,因?yàn)橐晥D的變化總是比模型的變化頻繁。

如果我們把邏輯放在Presenter中饵较,那么我們就可以脫離用戶接口來測(cè)試這些邏輯(單元測(cè)試)

5)MVP的問題

由于對(duì)視圖的渲染放在了Presenter中拍嵌,所以視圖和Persenter的交互會(huì)過于頻繁。

還有一點(diǎn)你需要明白循诉,如果Presenter過多地渲染了視圖横辆,往往會(huì)使得它與特定的視圖的 聯(lián)系過于緊密。一旦視圖需要變更茄猫,那么 Presenter也需要變更了


三:MVVM:Model View ViewModel(模型狈蚤,視圖,視圖模型)

MVVM+RN 數(shù)據(jù)雙向綁定

在 MVVM 中他的設(shè)計(jì)思路和 MVC 很像划纽。它正式規(guī)范了視圖和控制器緊耦合的性質(zhì)脆侮,并引入新的組件 ViewModel。此外勇劣,它還有像監(jiān)管版本的 MVP 那樣的綁定功能靖避,但這個(gè)綁定不是在 View 和 Model 之間而是在 View 和 ViewModel 之間。

1)MVVM 模式下的三個(gè)特性的分析:

任務(wù)均攤 -- MVVM 的 View 要比 MVP 中的 View 承擔(dān)的責(zé)任多。因?yàn)榍罢咄ㄟ^ ViewModel 的設(shè)置綁定來更新狀態(tài)筋蓖,而后者只監(jiān)聽 Presenter 的事件但并不會(huì)對(duì)自己有什么更新。

可測(cè)試性 -- ViewModel 不知道關(guān)于 View 的任何事情退敦,這允許我們可以輕易的測(cè)試 ViewModel?

易用性 -- 在實(shí)際開發(fā)中必須把 View 中的事件指向 Presenter 并且手動(dòng)的來更新 View粘咖,如果使用綁定的話,MVVM 代碼量將會(huì)小的多侈百。


MVVM思維導(dǎo)圖

1.在 MVVM 里瓮下,view 和 view controller 正式聯(lián)系在一起,我們把它們視為一個(gè)組件钝域。視圖 view 仍然不能直接引用模型 Model讽坏,當(dāng)然 controller 也不能。相反例证,他們引用視圖模型 View Model路呜。

2.View Model 是一個(gè)放置用戶輸入驗(yàn)證邏輯,視圖顯示邏輯织咧,發(fā)起網(wǎng)絡(luò)請(qǐng)求和其他各種各樣的代碼的極好的地方胀葱。有一件事情不應(yīng)歸入 View Model,那就是任何視圖本身的引用?

3.由于展示邏輯(presentation logic)放在了 View Model 中(比如 Model 的值映射到一個(gè)格式化的字符串)笙蒙,視圖控制器本身就會(huì)不再臃腫抵屿。當(dāng)然你開始使用 MVVM 的最好方式時(shí)可以先將一小部分邏輯放入視圖模型,然后當(dāng)你逐漸習(xí)慣于使用這個(gè)范式的時(shí)候再遷移更多的邏輯到視圖模型中捅位。

使用 MVVM 會(huì)輕微的增加代碼量轧葛,但總體上減少了代碼的復(fù)雜性。


備注:基本邏輯View--->ViewModel/Present(網(wǎng)絡(luò)邏輯)--->Model

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末艇搀,一起剝皮案震驚了整個(gè)濱河市尿扯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焰雕,老刑警劉巖姜胖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異淀散,居然都是意外死亡右莱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門档插,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慢蜓,“玉大人,你說我怎么就攤上這事郭膛〕柯眨” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耘柱。 經(jīng)常有香客問我如捅,道長,這世上最難降的妖魔是什么调煎? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任镜遣,我火速辦了婚禮,結(jié)果婚禮上士袄,老公的妹妹穿的比我還像新娘悲关。我一直安慰自己,他們只是感情好娄柳,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布寓辱。 她就那樣靜靜地躺著,像睡著了一般赤拒。 火紅的嫁衣襯著肌膚如雪秫筏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天挎挖,我揣著相機(jī)與錄音跳昼,去河邊找鬼。 笑死肋乍,一個(gè)胖子當(dāng)著我的面吹牛鹅颊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播墓造,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼堪伍,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了觅闽?” 一聲冷哼從身側(cè)響起帝雇,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛉拙,沒想到半個(gè)月后尸闸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孕锄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年吮廉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畸肆。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宦芦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轴脐,到底是詐尸還是另有隱情调卑,我是刑警寧澤抡砂,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站恬涧,受9級(jí)特大地震影響注益,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溯捆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一丑搔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧现使,春花似錦低匙、人聲如沸旷痕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欺抗。三九已至售碳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绞呈,已是汗流浹背贸人。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佃声,地道東北人艺智。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像圾亏,于是被迫代替她去往敵國和親十拣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容