MVC、MVCS、MVVM、MVP、VIPER等這麼多架構模式哪個好呢?

在項目開啓階段,其中一個很重要的環節就是選架構。

那麼面對目前已知的這麼多架構模式咱們該怎麼選擇呢?這確實是個很讓人頭疼的問題!前端

下面我就在這裏梳理一下目前常見的一些架構模式。編程

先逐個對它們的分析,而後在從中找到它們的規律,以後就能夠以不變應萬變,不會再被這些虛頭巴腦的名詞所迷惑。瀏覽器

本篇文章主要從兩個維度進行分析:緩存

1、任務分配方式網絡

2、邏輯分層方式數據結構

先看一下MVC、MVCS、MVVM、MVP、VIPER架構模式的任務分配方式架構

MVC併發

MVC是最經典的架構模式,它出現的時間很是早,也是最被人所熟知的。框架

MVC架構的任務分工爲:分佈式

M-model:

1.數據結構表示

2.讀取本地數據

3.寫數據到本地

4.處理弱業務

C-Controller:

1.處理主要業務邏輯

2.處理交互事件

3.協調V-M數據流

V-View:

1.展現數據

2.處理非邏輯交互事件。

根據上面描述,總之一句話歸納:

M:管理數據, C:處理數據, V:展現數據。

MVCS

看名字就感受這個MVCS架構模式是從MVC中分化出來的,事實上也確實如此。

S爲Store的簡稱,意思爲「存儲,保存」。

下面來看一下多出一個S後,它們的分工有什麼變化呢?

S-Store:

1.負責數據的存儲,數據本地持久化。

M-Model:

1.數據結構表示

2.讀取本地數據

3.處理弱業務

C-Controller:

1.處理主要業務邏輯

2.處理交互事件

3.協調V-M數據流

V-View:

1.展現數據

2.處理非邏輯交互事件。

從上面的分工可知C,V同MVC架構是徹底同樣的,只有M的數據存儲任務被分離了出來。即:S分擔了M的數據管理任務,那麼M和S其實都是數據管理的邏輯範疇了。

根據上面描述,總之一句話歸納:

(M+S):管理數據, C:處理數據, V:展現數據。

MVVM

MVVM爲了解決前端的響應式編程而生,因爲前端網頁混合了HTML、CSS和JavaScript,並且頁面衆多,代碼的組織和維護難度複雜,因此經過ViewModel實現View和Model的雙向綁定。

可是移動端不是前端,從業務處理邏輯上講,移動端要比前端處理的邏輯更多,你問我有啥依據。你能夠把手機的網斷掉,進入帶有離線功能的APP,一套業務走下來,沒啥問題。可是用瀏覽器打開呢,縱然添加了緩存,也是不能將一套業務走完的。

因此說,移動端要比前端處理的邏輯多!

看到MVVM你會有疑問,爲啥沒有C了,是否是用這個MVVM就不須要C了呢?若是你是移動端的同窗,我給你講是有C的。

MVVM架構在移動端的完整叫法是:M-V-C-VM。

MVVM架構的任務分工爲:

M-model:

1.數據結構表示

2.讀取本地數據

3.寫數據到本地

4.處理弱業務

C-Controller:

1.處理交互事件

2.協調V-M數據流

VM-ViewModel:

1.處理主要業務邏輯

V-View:

1.展現數據

2.處理非邏輯交互事件。

從上面的分工可知,VM分擔了C中的數據加工任務,將業務處理放到了ViewModel中,其餘的M,V同MVC架構徹底同樣。

總之一句話歸納:

M:管理數據, (C+VM):處理數據, V:展現數據。

MVP

MVP從MVC衍生而來,從名稱上看只是將C換成了P。其餘都同樣。而事實上呢?

它們也確實這樣,P承擔了C的任務而已。

區別是:它們兩個的數據流向不同

 

MVC的數據流向圖

 

MVP的數據流向圖

對比一下,就能夠同樣看出了。

MVC框架中,V的數據從Model中拿

MVP框架中,V的數據從Presenter中拿。

MVP架構的任務分工爲:

M-model:

1.數據結構表示

2.讀取本地數據

3.寫數據到本地

4.處理弱業務

P-Presenter:

1.處理主要業務邏輯

2.處理交互事件

3.協調V,M數據流,從M讀取數據,將數據經過接口供V調用。

V-View:

1.展現數據

2.處理非邏輯交互事件。

根據上面描述,總之一句話歸納:

M:管理數據, P:處理數據, V:展現數據。

VIPER

VIPER是責任粒度劃分比較細的一個架構模式,是按照「責任單一原則」的標誌來走的,每一個類所承擔的任務更簡單。

VIPER架構的任務分工爲:

E-Entity:

1.數據結構表示

2.讀取本地數據

3.寫數據到本地

I-Interactor:

1.處理主要業務邏輯

P-Presenter:

1.處理弱業務

2.處理交互事件

R-Routing:

1.處理視圖的展現順序邏輯或者說是控制器的跳轉控制

V-View:

1.展現數據

2.處理非邏輯交互事件。

根據上面描述,可粗略的歸納爲:

E:管理數據, (I+P+R):處理數據, V:展現數據。

架構從邏輯分層上講,常見有兩種:

三層架構:展現層,業務層,數據層。

四層架構:展現層,業務層,網絡層,本地數據層。

架構從任務分配上講,常見有五種:

MVC、MVCS、MVVM、MVP、VIPER

而一般在工程中,這兩個維度的思想是同時存在的。

好比:三層MVC架構,四層MVC架構。

前面的層級表示邏輯分層方式

後面的形式表示任務分配方式

對於上面講的五種任務分配方式,由於是已經被人熟知,全部被大工程所採用。

可是目前有個疑惑

若是有時候一個業務模塊很負責時,會不斷的講業務分拆。會產生不少種目錄與文件。

若是模塊內視圖控制器跳轉邏輯負責時,會引入中介者模式進行統一管理跳轉。

這時,模塊內的任務分配文件相對於這五種架構模式,顯得有點四不像了。

這時就會疑惑,我這到底用的是什麼架構模式啊?

經過上面五種架構責任劃分的介紹,咱們能夠知道

不管是什麼架構模式,它們的區別是:任務的分配方式不一樣罷了。

雖然咱們在任務分配後的文件和目錄四不像,可是能夠知足咱們的業務需求和功能擴展,這就夠了。

不要被形式上所限制。

想免費學習Java工程化、分佈式架構、高併發、高性能、深刻淺出、微服務架構、Spring,MyBatis,Netty源碼分析等技術的朋友,能夠加羣:479499375,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們,歡迎進羣一塊兒深刻交流學習。

那麼什麼是好的架構模式呢?

我的認爲比較好的架構模式爲:三層MVC架構

任務分配方法是以MVC任務分配方案爲基礎,按照必定的原則進行個性化分配。

採用以下分配原則:

1.保留當前角色的主要功能,拆分次要功能。

2.弱業務功能放到Model中,儘可能不要放到Controller裏去。

3.拆分出去的業務功能儘可能封裝成可複用組件、對象或協議。

4.控制好拆分粒度,調用接口少參或無參。

這樣無論形式如何變化,只有架構邏輯分層在,同時知足業務須要和功能擴展就是好架構。

相關文章
相關標籤/搜索