從Knockout到Angular的架構演變
2015-06-30 23:37 圣殿騎士 閱讀(15712) 評論(53) 收藏 舉報2008年第一次在WPF中使用MVVM模式之后,就一直熱衷于耦合隔離、模塊化與重構、UI和邏輯分離、單元測試以及后面的領域模型。談及MVVM模式,自己也開發過一套框架,但沒有長期更新和維護,所以索性就一直使用Prism和MVVM Light。到2012年的時候,看到HTML5的大行其道和Silverlight的衰落,果斷把主要精力投入到ASP.NET MVC和Knockout的開發和研究當中,雖然Knockout比較容易上手且方便使用,但總覺得沒有在WPF和Silverlight中使用MVVM那么酣暢淋漓。
|
WPF/Silverlight |
Web |
|
|
MVVM框架 |
· Prism · MVVMLight · Caliburn(Caliburn.Micro) · MVVM Helpers · Cinch · 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的命運尚不知曉),可能連微軟自己也不能很好地解答這個問題,所以一切只能由市場和時間來慢慢決定。
作者:圣殿騎士
出處:http://www.rzrgm.cn/KnightsWarrior/
關于作者:專注于微軟平臺項目架構、管理和企業解決方案。自認在面向對象, 面向服務以及微服務領域有一定的造詣,熟悉設計模式、TDD、極限編程、領域驅動、架構設計、敏捷開發和項目管理。現主要從事.NET/.NET Core, Go, JavaScript/TypeScript, Azure/AWS等云計算方面的項目開發、架構、管理和企業培訓工作。如有問題或建議,請多多賜教!
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。如有問題,可以郵件:KnightsWarrior(at)msn(dot)com
微博:圣殿騎士微博 聯系我,非常感謝。


浙公網安備 33010602011771號