火熱的MVVM框架
最近幾年最熱門的技術(shù)之一就是前端技術(shù)了,各種前端框架,前端標(biāo)準(zhǔn)和前端設(shè)計(jì)風(fēng)格層出不窮,而在眾多前端框架中具有MVC,MVVM功能的框架成為耀眼新星,比如GitHub關(guān)注度很高的Vue.js ,由于是國人作品,其設(shè)計(jì)風(fēng)格和文檔友好度對國人而言更勝一籌,因此我也將它推薦到公司采用,其中我推薦都理由就是它非常優(yōu)秀的MVVM功能,面向數(shù)據(jù)而不是面向DOM細(xì)節(jié)相比jQuery等更加節(jié)省代碼,更符合后端程序員的胃口,也更有利于UI設(shè)計(jì)人員跟程序員都分工配合。
下面是Vue.js實(shí)現(xiàn)MVVM功能的原理圖:
前面說的Vue.js框架這些優(yōu)點(diǎn)的是否很眼熟?沒錯(cuò),這就是早些年流行于WPF的MVVM技術(shù),相比WinForms技術(shù),WPF可以提供給UI設(shè)計(jì)人員更加強(qiáng)大的設(shè)計(jì)能力,做出更炫更好看的界面。只不過MS的很多技術(shù)總是很超前技術(shù)更新很快,WPF新推出的時(shí)候WinForms還占據(jù)桌面開發(fā)主要領(lǐng)域,隨后還沒有火起來移動(dòng)開發(fā)時(shí)代已經(jīng)來臨,基于Web的前端技術(shù)大大發(fā)展,從而風(fēng)頭蓋過了WPF,但是WPF引入的MVVM思想?yún)s在Web前端得到了發(fā)揚(yáng)光大,現(xiàn)在各種基于MVVM的前端框架猶如雨后春筍。
WinForms上的MVVM需求
Web前端技術(shù)的大力發(fā)展,各種跨平臺的基于HTML5的移動(dòng)前端開發(fā)技術(shù)逐漸成熟,各種應(yīng)用逐步由傳統(tǒng)的C/S 轉(zhuǎn)換到 B/S ,APP模式,基于C/S模式的前端技術(shù)比如WPF的關(guān)注度逐漸下降,因此WPF上的MVVM并不是應(yīng)用得很廣,目前很多遺留的或者新的 C/S系統(tǒng)仍然采用WinForms技術(shù)開發(fā)維護(hù),然而WinForms 上卻沒有良好的MVVM框架,WinForms 的UI效果和整體開發(fā)質(zhì)量,開發(fā)效率沒有得到有效提高,要過度到WPF開發(fā)這種不同開發(fā)風(fēng)格的技術(shù)難度又比較大,所以,如果有一種能夠在 WinForms 上的MVVM框架,無疑是廣大后端.NET程序員的福音。
筆者一直是一個(gè)奮斗在一線的.NET開發(fā)人員,架構(gòu)師,對于Web 和桌面,后端開發(fā)技術(shù)都有廣泛的涉及,深刻理解開發(fā)人員自嘲自己為“碼農(nóng)”的心理的,工作辛苦又沒有時(shí)間陪女朋友陪家人,所以我一直總結(jié)整理如何提高開發(fā)效率,改善開發(fā)質(zhì)量的方法,經(jīng)過近10年的時(shí)間,發(fā)展完善了一套開發(fā)框架—SOD框架。最近研究改善Web前端開發(fā)的技術(shù),Vue.js框架的MVVM思想再一次讓我覺得WinForms上MVVM技術(shù)的必要性,發(fā)現(xiàn)要實(shí)現(xiàn)MVVM框架其實(shí)并不難,關(guān)鍵在于模型(Model)和視圖(View)的雙向綁定,即模型的改變引起視圖內(nèi)容的改變,而視圖的改變也能夠引起模型的改變。
SOD WinForms MVVM實(shí)現(xiàn)原理
要實(shí)現(xiàn)這種改變,對于被綁定方,必須具有屬性改變通知功能,當(dāng)綁定方改變的時(shí)候,通知被綁定方讓它做相應(yīng)的處理。在.NET中,實(shí)現(xiàn)這種通知功能的接口就是:
INotifyPropertyChanged
它的定義在System.dll 中,早在 .NET 2.0 就已經(jīng)支持。下面是該接口的具體定義:
namespace System.ComponentModel { //