對 MVC MTV 和 MVVM的理解總結

2022-09-23 17:09:10 字數 2460 閱讀 3683

對 mvc、mtv 和 mvvm的理解總結。

mvcmvc(model view controller 模型-檢視-控制器)是一種web架構的模式。

特點:把業務邏輯、模型資料、使用者介面分離開來,讓開發者將資料與表現解耦。

mvc三要素:

model(資料模型)。是對客觀事物的抽象。

比如知乎live,live就是乙個模型,可以用live類來表示。而乙個模型通常還帶有很多的和業務相關的邏輯,比如新增,更新,獲取live主講人資訊等等,這些組成了模型的方法。對於開發者模型的表示方法非常易懂和清晰,可以通過非常便捷的**來做curd操作而無需寫一條又一條的sql語句。

view(檢視)。呈現給使用者的效果,呈現的內容是基於model,它也是收集使用者輸入的地方。

比如看到一篇live,資料是乙個live.get(live_id).to_dict()的結果,效果是通過對應的模板和樣式把這個資料展示出來。

contorller(控制器)。是model和view之間的溝通者。

因為view中不會對model作任何操作,model不會輸出任何用於表現的東西,如html**或者某種效果等,它就是點資料。而contorller用於決定使用哪些model,對model執行什麼操作,為檢視準備哪些資料,是mvc中溝通的橋梁。

mvc的通訊是單向的:

瀏覽器傳送請求

contorller和model互動獲取資料

contorller呼叫view

view渲染資料返回

更簡單的表示式:v -> c-> m -> c -> v

mtv和rails、spring、lar**el等其他語言的web框架不一樣,在python的世界中,基本(除了pylons)都使用了mvc的變種mtv(model templates view 模型-模板-檢視):

model(資料模型)。和mvc的model一樣,處理與資料相關的所有事務:如何訪問、如何確認有效性、包含哪些行為以及資料之間的關係等。

template(模板)。處理與表現相關的決定:如何在頁面或其他型別文件中進行顯示出來。

view。處理業務邏輯,檢視就是乙個特定url的**函式,**函式中描述資料:從model取出對應的資料,呼叫相關的模板。它就是contorller要呼叫的那個用來做model和view之間的溝通函式,從而完成控制。

注意:mvc中的view的目的是「呈現哪乙個資料」,而mtv的view的目的是「資料如何呈現」。

也就是把mvc中的view分成了檢視(展現哪些資料)和模板(如何展現)2個部分,而contorller這個要素由框架自己來實現了,我們需要做的就是把(帶正規表示式的)url對應到檢視就可以了,通過這樣的url配置,系統將乙個請求傳送到乙個合適的檢視。

需要注意,flask這種微框架就不是乙個mvc模式的,因為它沒有提供model,除非整合了sqlalchemy之類的orm進來。

mvvm

定義:mvvm(model-view-viewmodel),是一種基於前端開發的架構模式。

核心是提供對view 和 viewmodel 的雙向資料繫結,view和model之間並沒有直接的聯絡,而是通過viewmodel進行互動,view的變動,自動反映在viewmodel上,反之亦然,這樣就保證檢視和資料的一致性。

**:現在前端,不僅僅是簡單的資料展示了,它不僅要管理複雜的資料狀態,還要處理移動裝置上各種操作行為等等。因此,前端也需要工程化,也需要乙個類似於mvc 的框架來管理這些複雜的邏輯,使開發更加高效:

view ui布局,展示資料

model 管理資料

controller 響應使用者操作,並將 model 更新到 view 上

前端應用的複雜程度已不同往日,今非昔比。這時前端開發就暴露出了三個痛點問題:

開發者在**中大量呼叫相同的dom api, 處理繁瑣,操作冗餘,使得**難以維護。

大量的dom 操作使頁面渲染效能降低,載入速度變慢,影響使用者體驗。

當 model 頻繁發生變化,開發者需要主動更新到view ;當使用者的操作導致model發生變化,開發者同樣需要將變化的資料同步到model中, 這樣的工作不僅繁瑣,而且很難維護複雜多變的資料狀態。

早期 jquery 的出現就是為了前端能更簡潔的操作dom 而設計的,但它只解決了第乙個問題,另外兩個問題始終伴隨著前端一直存在。

mvvm 的出現,完美解決了以上三個問題。

mvvm 的三部分:

model 層代表資料模型,也可以在model中定義資料修改和操作的業務邏輯;

view 代表ui 元件,它負責將資料模型轉化成ui 展現出來,

viewmodel 是乙個同步view 和 model的物件。

view 和 model 之間並沒有直接的聯絡,而是通過viewmodel進行互動。

viewmodel 通過雙向資料繫結把 view 層和 model 層連線了起來,而view 和 model 之間的同步工作完全是自動的,無需人為干涉,因此開發者只需關注業務邏輯,不需要手動操作dom, 不需要關注資料狀態的同步問題,複雜的資料狀態維護完全由 mvvm 來統一管理。

對vue中MVVM模型理解

mvvm 是 model view viewmodel 的縮寫 model 代表資料模型,也可以在model中定義資料修改和操作的業務邏輯。我們可以把model稱為資料層,因為它僅僅關注資料本身,不關心任何行為 view 使用者操作介面 dom 當viewmodel對model進行更新的時候,會通過...

談談你對MVVM開發模式和MVT的理解?

mvvm分為model view viewmodel三者。model 代表資料模型,資料和業務邏輯都在model層中定義 view 代表ui檢視,負責資料的展示 viewmodel 負責監聽 model 中資料的改變並且控制檢視的更新,處理使用者互動操作 model 和 view 並無直接關聯,而是...

MVVM基礎概念和理解

在mvvm模式中,view封裝ui和ui邏輯,viewmodel封裝presentation邏輯,model封裝業務邏輯和資料。view類 view的責任是定義螢幕上的結構和外觀,在完美的情況下,view的code behind只包含乙個建構函式,這個構造函式呼叫initializecomponen...