程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 基於wpf的相關設計問題-ViewModel

基於wpf的相關設計問題-ViewModel

編輯:關於.NET

prism v2正式版本已經發布,有興趣的可以去研究一下.框架給了我們一些實用的功能參考,並不代表實 際開發就不會遇到問題。有些人以為只要套用了框架,開發效率就會提升很好,就好比有人以為只要我掌 握了設計模式,開發效率會提升一樣。框架只是為我們解決一部分常用的問題.但對於不同系統的設計總 有些不同.本篇將討論在wpf中主要使用了一些設計方法.

一.Model-View-Presenter

MVP模式現已經非常常用,如果你不熟悉請參考此文MVP 模式實例解析,我把我自己理解的相關類列出來 .

我來介紹一下流程(下為博客園登錄界面)

1.抽象View成員 LoginView是一個UserControl,將界面上的屬性抽象出來,定義成一個ILoginView接口 .

2.在LoginView初始化時,同時初始化LoginViewPresenter,可調用Initialize方法做一些初始化工作( 這裡可知道,View是知道LoginViewPresenter存在的,同時LoginViewPresenter又可以調用LoginView的相 關屬性和方法).

3.當觸發登錄事件時,LoginViewPresenter將會調用ValidateLogin方法來驗證View的UserName和 Password.

4.ValidateLogin方法將會牽涉到數據庫的一些操作,所以把這部分的操作分離到Controller中(即 Service).

5.驗證完成後再通知LoginView的驗證結果以便更新界面信息.

以上為基本的步驟,實際操作起來並非簡單,重點在於如何把職責分明確,同時使用此模式也希望能更加 的簡便.

MVP模式與asp.net

上面的應用假設是應用於web系統,則依賴於asp.net的WebForms(WebForms很適合這樣的操作),實際中 卻不現實,asp.net mvc模式相對而言就比較容易,其做了相對多的封裝.WebForms則模擬的web的無狀 態,MVP會依賴於asp.net控件,使得開發者無法認識web的本質(html,css,javascript), 陷入模式中無法 自拔.所以我個人並不是非常推薦,當然還是要看具體場合.

以上簡單介紹了MVP模式的基本應用,等下我們來看一下其在wpf中的應用.

二.Presentation Model

1.Model與View的演變

在上面MVP模式,我們並沒有說到Model,Model是什麼?

ILoginView視圖中的兩個屬性是我們需要的屬性,視圖是最容易發生變化的地方,隨著視圖的電 話,IView和Presenter也要跟著發生變化,如,這裡我把UserName更改為FirstName和LastName拼成一個 UserName.現在我把這些屬性單獨提取出來,現在變更如下.

這裡的Model是根據特定View而定的,所以也會隨著View的變化而發生變化.這個Model被稱為 Presentation Model

傳統的MVC中的Model一般指數據層的對象,兩者是不同的.

以上的變化在很多情況下也是不確定的,因為隨著View的變化,View可以做出一些封裝(如封裝 FirstName和LastName兩個字段,View的做法有很多)讓Model不發生變化,由於視圖存著一些不確定因素,比 如技術問題,就不得退而求其次,改Model.這個問題是確實存在的.

三.基於技術的基礎上變更模式Model-View-ViewModel (MVVM)

以上的變更,並非毫無意義,很多模式都是因為框架提供一些特定的技術而演變出來的,這裡也不例外的 .數據綁定技術在.net中應用的非常廣泛。asp.net,winfrom和wpf均有數據綁定技術,視圖是沒有方法的, 只由控件組成,我們就是要抽取這些控件的屬性而定義這個Model,然後將控件的屬性與Model屬性綁定起來 ,以便視圖和Model雙方發生變化時能相互通知(綁定比賦值更簡單,更容易讓人接受,簡化了工作)

下圖表示了View與Model之間的關系,兩者的變化是雙向綁定的.

如果你開發過wpf或者silverlight程序,相信你已經領略過其數據綁定的強大之處,這樣的做法用在 wpf技術上,恰到好處.

模式只是一種想法,需要通過技術來實現(就如很多人知道mvc模式一樣,但並非每個人都能做出像 asp.net mvc這樣的框架的),wpf的數據綁定與Presentation Model相集合是非常好的做法,使得開發人員 可以將View和邏輯分離出來,但這種數據綁定技術(簡單實用)是wpf特有的,所以我們又稱之為Model-View -ViewModel (MVVM),很多人搞不清楚MVVM與Presentation Model的區別,其實脫離了技術,兩者毫無區別, 我們可以理解為基於wpf的數據綁定技術的Presentation Model稱之為為Model-View-ViewModel (MVVM), 這也是我個人的理解,如有不同意見或我理解錯誤請下面提出來.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved