在WinForm程序中使用MVVM開發模式

WinForm程序中使用MVVM開發模式

熟悉WPF的朋友一定在WPF程序中使用了MVVM的開發模式,因爲MVVM可以帶來以下幾個優點:

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

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

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

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

 

那麼能否在WinForm程序中也使用MVVM模式呢,答案是肯定的。本人最近剛剛完成一個框架bedrock,已開源到此地址:https://github.com/jackhuclan/bedrock,(喜歡的朋友可以給個star此框架的正是爲了此目的而來的。

 

一、 Bedrock能做什麼

Ø 各個業務模塊能夠按需動態加載,也就是實現靈活的插件式架構,實現模塊級別的分離

Ø 各個子模塊中的界面也可以靈活地呈現到主界面中,也就是實現界面區域的插件化

Ø 各個對象實例的生命週期由Unity進行管理

Ø ViewModel能由框架自動注入到View,實現與WPF一致的MVVM模式

Ø 解耦各種組件,如ViewModel,業務組件,數據訪問組件等等,有利於單元測試。

 

Q1,爲什麼不直接用WPF,而是在要在WinForm程序中實現MVVM

A:一,因爲大量歷史系統是WinForm開發的,你跟老闆說全部用WPF重寫一遍,老闆說,重寫系統這段時間不付你薪水可以嗎?

二,這些歷史系統還在生命週期中,客戶還在持續付費,但是客戶有些新的需求,你是否將新需求的代碼加入到那些已經一團糟的代碼中呢?還是以插件的方式,靈活加載進來?

三,對於歷史系統的重構應該以循序漸進的方式,而不是完全推到重建。此框架可以幫助你在歷史系統中以最小侵入實現插件式架構,模塊級別的,哪怕是頁面上一個控件級別的。

四,方便以後有機會將整個系統重構爲WPF

 

Q2,這個框架和Prism很像

A:的確這個框架是在Prism的基礎上改造而來的,prism是基於WPF的,但是它的模塊加載機制,事件消息分發機制都是極好的東西,爲什麼不用?

吾嘗終日而思矣,不如須臾之所學也;吾嘗跂而望矣,不如登高之博見也。登高而招,臂非加長也,而見者遠;順風而呼,聲非加疾也,而聞者彰。假輿馬者,非利足也,而致千里;假舟楫者,非能水也,而絕江河。君子生非異也,善假於物也。--荀子《勸學》

 

Q3,這個框架有嚴格的單元測試嗎?

A:目前這個框架有305個單元測試,更多單元測試還在完善當中,開源後也希望有興趣的朋友共同參與

 

Q4,這個框架開源嗎,可以免費使用嗎?

A:此框架基於MIT License,任何人和企業可以任意修改,任意分發,免費使用。

 

1. 演示模塊的按需加載,請參考bedrock\Quickstarts\Modularity\Modularity.sln項目,點擊ModuleB將會加載ModuleB,點擊ModuleF將會先加載ModuleF的依賴項ModuleE,然後加載ModuleF

 

界面展示

 

2. 演示子模塊界面呈現到主界面中

 

呈現到Form1中的效果

 

3. 演示組件分離,ViewModel自動注入

 

項目結構:

 

View層

 

ViewModel層:

 

Service層:

 

你會發現ViewModelView是沒有直接關聯的,因此你可以很方便的爲ViewModel添加單元測試。

 

 

 

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