開發項目的時候到底用那種模式, MVC,MVP 和 MVVM ?

前提:最近自己想寫一套系統出來,看着別人寫的代碼,總覺得爲什麼別人寫得這麼好,條理這麼清晰。可能是我學的語言問題或者知識面不夠吧。建議學語言先學強語言,強語言學會了,弱語言基本都不是問題。接下來了解一下 MVC,MVP 和 MVVM,還有業務層,邏輯層,數據層是怎麼運作的。

發展歷程

在這裏插入圖片描述

MVC

C:控制器(Controller)——應用程序中處理用戶交互的部分
M:模型(Model)——應用程序數據邏輯
V:視圖(View)——應用程序中處理數據顯示的部分

運行方式
在這裏插入圖片描述在這裏插入圖片描述

流程
MVC的通信都是單向的,由圖也可以看出,View層會從Model層拿數據,因此MVC中的View層和Model層還是存在耦合的。一般客戶訪問通過 View 接受指令,傳遞給 Controller,然後對模型進行修改或者查找底層數據,最後把改動渲染在視圖上。

優點
1、耦合性低,視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼。
2、重用性高
3、生命週期成本低
4、MVC使開發和維護用戶接口的技術含量降低
5、可維護性高,分離視圖層和業務邏輯層也使得WEB應用更易於維護和修改
6、部署快

缺點
1、不適合小型,中等規模的應用程序,花費大量時間將MVC應用到規模並不是很大的應用程序通常會得不償失。
2、視圖與控制器間過於緊密連接,視圖與控制器是相互分離,但卻是聯繫緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。
3、視圖對模型數據的低效率訪問,依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。

應用
1、Web開發領域
2、移動互聯開發
3、與交互相關的開發

MVP

M:模型(Model)——管理數據
V:視圖(View)—— 負責顯示頁面
P:控制器(將 Controller 改名爲 Presenter)——業務邏輯

運行方式
在這裏插入圖片描述
流程:通過 View 接受指令,傳遞給 Presenter,然後對模型進行修改或者查找底層數據,最後把改動渲染在視圖上。

特點:View 與 Model 不通信,都通過 Presenter 傳遞。Presenter完全把Model和View進行了分離,主要的程序邏輯在Presenter裏實現。View 非常薄,不部署任何業務邏輯,稱爲”被動視圖”(Passive View),即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那裏。

區別
在MVP中,View並不直接使用Model,它們之間的通信是通過Presenter (MVC中的Controller)來進行的,所有的交互都發生在Presenter內部。在MVC中,View會直接從Model中讀取數據而不是通過 Controller。

MVVM

M:模型(Model)——處理數據
V:視圖(View)——顯示
VM:控制器(ViewModel)——將 Presenter 改名爲 ViewModel

運行方式
在這裏插入圖片描述
舉例說明
視圖層

<p>Hello, {{ name }}!</p>          --View層 --VUE中的單向綁定
<input v-model="name">             --View層 --VUE中的雙向綁定

數據層

data: {
            name: ''               --Model層
        }

我們此時想改變視圖層<p>標籤和<input>標籤中的name屬性的值,只需要通過如下方式即可,這樣頁面中就會顯示“Jack”的名字

this.name = 'jack'

如果不是MVVM框架,我們則需要通以下方式,這種操作dom節點的方式來改變頁面的值。

document.getElementById('name').innerHTML = 'jack'

MVVM模式和MVC模式類似,主要目的是分離視圖(View)和模型(Model),有幾大優點:

1、低耦合,視圖(View)可以獨立於Model變化和修改,一個ViewModel可以綁定到不同的”View”上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。

2、可重用性,可以把一些視圖邏輯放在一個ViewModel裏面,讓很多view重用這段視圖邏輯。

3、獨立開發,開發人員可以專注於業務邏輯和數據的開發(ViewModel),設計人員可以專注於頁面設計,使用Expression Blend可以很容易設計界面並生成xml代碼。

4、可測試,界面向來是比較難於測試的,而現在測試可以針對ViewModel來寫。

學習了上面類分析一下thinkphp的目錄結構,就知道用什麼模式開發。

Model數據層——用於做數據庫的操作

View視圖層——PHP做接口返回數據,交給客戶端進行渲染

Controller控制器層——它處理用戶與服務器的交互,用戶輸入URL,經過框架啓動、路由分配,到控制器層。

Logic邏輯層——處理業務邏輯,在嚴格的mvc劃分中,需要將邏輯處理放到logic層去處理,用控制器層進行調用,Logic層可以作爲數據驗證,以及業務邏輯處理操作,可將常用的可複用的業務邏輯抽象成一個Logic,Controller可以直接調用Logic。對於簡單的業務,可以直接調用Model;如果有複用必要,整理到Logic中。

Service服務層——通俗解釋就是爲其他層提供服務,該層主要爲處理一些數據邏輯的,偏向於邏輯處理,相當於是控制器和模型層的結合,將模型層的簡單數據進行再次的邏輯處理
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章