蘋果典型的MVC模式勾习,用戶通過 View 將交互(點(diǎn)擊趟佃、滑動(dòng)等)通知給 Controller腾降,Controller 收到通知后更新 Model,Model 狀態(tài)改變以后再通知 Controller 來改變他們負(fù)責(zé)的 View短曾。由于在 iOS 中我們常用的 UIViewController 本身就自帶一個(gè) View碍论,所以在 iOS 開發(fā)中 Controller 層和 View 層總是緊密的耦合在一起谅猾,如果一個(gè)頁面業(yè)務(wù)邏輯量大的話,一個(gè)視圖控制器經(jīng)常會(huì)很多行的代碼鳍悠,導(dǎo)致視圖控制器非常的臃腫赊瞬。缺陷包括如下兩點(diǎn):
1.厚重的ViewController
2.較差的可測(cè)試性
3.較差的可讀性
MVVM(Model-View-ViewModel),其實(shí)也是基于 MVC 的贼涩∏山В可以看出MVVM的模式解決了 MVC 模式中的一些問題,使得 ViewController 代碼量減少遥倦、使得可讀性變高谤绳、代碼單元測(cè)試變得簡(jiǎn)單。但是 MVVM 也有其一些缺陷袒哥。
1.出現(xiàn)了bug第一時(shí)間定位不到 bug 的位置缩筛,有可能是 View 層的 bug 傳到了 Model 層。
2.較大的工程的項(xiàng)目堡称,數(shù)據(jù)的綁定和轉(zhuǎn)換需要較大的成本瞎抛。
其他的一些架構(gòu)模式
比如MVP(Model-View-Presenter)、VIPER(View-Interactor-Presenter-Entity-Routing)却紧、MVCS(Model-View-Controller-Store)等桐臊,其實(shí)都是基于 MVC 思想派生出來的一些架構(gòu)模式,基本都是為了給 Controller 減負(fù)而生的晓殊,所以還是那句話韧衣,萬變不離 MVC 尔许!
iOS新架構(gòu)的需求:
組件化:對(duì)頁面進(jìn)行組件化解耦蜈彼,這里我所使用的組件化方案是target-action方式剖淀,使用的是 Casa Taloyum的CTMediator,其主要的思想就是通過一個(gè)中間者來提供服務(wù)介汹,通過runtime來調(diào)用組件服務(wù)却嗡。
AOP(Aspect-oriented programming),面向切面編程嘹承。在iOS中有一個(gè)應(yīng)用非常多的輕量級(jí)的 AOP 庫?Aspects窗价,它允許你能在任何一個(gè)類和實(shí)例的方法中插入新的代碼。
混合應(yīng)用新架構(gòu)需求:
uni-app是一個(gè)使用 Vue.js 開發(fā)所有前端應(yīng)用的框架赶撰,開發(fā)者編寫一套代碼舌镶,可發(fā)布到iOS、Android豪娜、H5餐胀、以及各種小程序(微信/支付寶/百度/頭條/QQ/釘釘)等多個(gè)平臺(tái)。