2008年第一次在WPF中使用MVVM模式以後。就一直熱衷於耦合隔離、模塊化與重構、UI和邏輯分離、單元測試以及後面的領域模型。談及MVVM模式,本身也開發過一套框架,但沒有長期更新和維護,因此索性就一直使用Prism和MVVM Light。到2012年的時候,看到HTML5的大行其道和Silverlight的衰落,果斷把主要精力投入到ASP.NET MVC和Knockout的開發和研究其中,雖然Knockout比較easy上手且方便使用,但總認爲沒有在WPF和Silverlight中使用MVVM那麼酣暢淋漓。跨域
WPF/Silverlight 瀏覽器 |
Web架構 |
|
MVVM框架app |
· Prism框架 · MVVMLightide · Caliburn(Caliburn.Micro)模塊化 · MVVM Helpers工具 · Cinchpost · MVVMFoundation性能 |
· AngularJS · Knockout (or use Durandal) · Backbone.js · Ember.js · Epitome · Agility.js |
雖而後面嘗試過其它框架。比方經過Durandal 實現SPA讓我以前對Knockout的種種不便有所改觀。但始終仍是有所缺憾,直至現在使用Angular,尤爲是Angular + TypeScript才發現一切問題都不復存在了。
(以前使用WPF/Silverlight的最大問題事實上是很是難招到合適的人員作美工和設計。因爲很是少人會專門投入到Blend和XAML的研究其中,但現在使用Web就會發現資源是那麼的豐富,不管是人力資源仍是開源社區)
功能 |
WPF/Silverlight |
AngularJS |
UI |
XAML |
HTML+CSS |
設計工具 | Design/Blend and Visual Studio | All professional design tools |
控件模板和本身定義控件 |
Control Templates or Custom Control |
Custom Directives (Element) |
動畫 |
System.Windows.Media.Animation |
CSS3 Animations and/or JavaScript via ngAnimate |
樣式和模板 |
XAML/Resources |
CSS3 and LESS |
樣式繼承和關聯 |
Implicit Styles and/or BasedOn |
LESS Mixins |
轉換和過濾 |
IValueConverter |
Filters |
綁定Model到UI |
ViewModel and DataContext |
Controller and Scope |
服務重用 |
Prism Service Locator |
Custom Services/Service Factory |
事件 |
Routed Events |
$emit and $broadcast |
模塊化 |
MEF and/or Prism Module Catalog |
Angular Modules |
Services |
WCF or WCF RIA Services |
RESTful services (accessed via the Angular $http/$resource Services) |
導航與路由 |
UriMapper |
Routing |
內部組件通訊 |
Prism Event Aggregator or Messager |
Shared Services |
視頻 |
MediaElement |
HTML5 Video Element |
脫離瀏覽器執行 |
Yes |
Yes, via Chrome Apps |
封裝UI邏輯 |
Behaviors |
Custom Directives (Attribute) |
UI與邏輯分離 |
Control or Data Templates |
CSS/LESS |
跨域請求 |
Access-Policy |
CORS |
單向數據綁定 |
BindingMode.One |
Ng-Bind |
雙向數據綁定 |
BindingMode.TwoWay |
Ng-Model |
單向數據源綁定 |
BindingMode.OneTime |
Ng-Model |
開源模板 |
Modern UI or MahApps |
Bootstrap or Foundation |
瀏覽器支持 |
Need silverlight plugin or XBAP |
All supported |
因此現在將架構由Knockout到Angular的調整並使用到新項目的開發,詳細例如如下:
到眼下爲止,尚未發現Angular有什麼大的技術難題或者性能問題。假設有Angular項目經驗的朋友,最好仍是留言討論。學習共勉!
另外。很是多人發郵件問WPF是否會像Silverlight同樣消亡。事實上這個問題很是難回答,尤爲在眼下這個不光是微軟主導的開發環境下(HTML5流行度遠甚於XAML。IOS和Android的大行其道與Windows Phone的不溫不火,Windows的命運尚不知曉)。可能連微軟本身也不能很是好地解答這個問題,因此一切僅僅能由市場和時間來慢慢決定。