MVC設計模式(View和Model之間不能直接通信) MVC是一種架構模式,M表示Model,V表示視圖View,C表示控制器Controller: Model負責存儲、定義、操作數據、從網路中獲取數據(Struts中Service和Form); View用來展示給用戶,並且和用戶進行交互; Co ...
MVC設計模式(View和Model之間不能直接通信)
MVC是一種架構模式,M表示Model,V表示視圖View,C表示控制器Controller:
- Model負責存儲、定義、操作數據、從網路中獲取數據(Struts中Service和Form);
- View用來展示給用戶,並且和用戶進行交互;
- Controller是Model和View的協調者,Controller把Model中的數據拿過來給View使用。Controller可以直接與Model和View進行通信,而View不能與Controller直接通信。,當有數據更新時,Model也要與Controller進行通信,這個時候就要用Notification和KVO,這個方式就像發廣播一樣,Model發信號,Controller設置接收監聽信號,當有數據更新是就發信號給Controller,Model和View不能直接通信,這樣違背MVC設計原則。View與Controller通信需要利用代理協議的方式,Controller可以直接根據Model決定View的展示。View如果接受響應事件則通過delegate,target-action,block等方式告訴Controller的狀態變化。Controller進行業務的處理,然後再控制View的展示。
- 那這樣Model和View就是相互獨立的。View只負責頁面的展示,Model只是數據的存儲,那麼也就達到瞭解耦和重用的目的。
實例解析
UML圖:大家熟悉MVC的調用流程邏輯
MVVM是一種設計思想,M表示Model,V表示視圖View,VM表示數據與模型(區別MVC中,C是用於跳轉至哪個頁面,而VM只是將數據進行轉換或者封裝):
VM:首先要理解binding,可以參考WPF中的Binding,一個控制項與後臺數據模型(VM)進行綁定,後臺數據模型也可以與M進行交互。VM就是將V->M或M-V的數據進行轉換或者封裝
1.當前臺View發生變化時,View與VM進行了綁定,VM又與M進行交互,從而使M得到了改變。
2.當M變化時,以C#為例,M中的DO實現了INotifyChanged,當檢測到變化時,M通知VM,VM與V進行了綁定,然後實現M->V。