从Knockout到Angular的架构演变
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的命运尚不知晓),可能连微软自己也不能很好地解答这个问题,所以一切只能由市场和时间来慢慢决定。
从Knockout到Angular的架构演变的更多相关文章
- [转载]大型网站应用中 MySQL 的架构演变史
没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...
- Mysql在大型网站的应用架构演变
原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/本文链接地址: Mysql在大型网站的应用架构演变 本文已经被多处转载,包括CSDN推荐以及码农周刊等等,阅 ...
- 从100PV到1亿级PV网站架构演变
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不 ...
- 大型网站应用中MySQL的架构演变史
没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...
- 转:Mysql在大型网站的应用架构演变
原文来自于:http://www.cnblogs.com/Creator/p/3776110.html 原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/本文 ...
- MyCat 启蒙:分布式系统的数据库架构演变
文章首发于[博客园-陈树义],点击跳转到原文<MyCat 启蒙:分布式系统的数据库架构演变> 单数据库架构 一个项目在初期的时候,为了尽可能快地验证市场,其对业务系统的最大要求是快速实现. ...
- 浅谈JavaWeb架构演变
一 JavaWeb架构演变 在java架构模式中,我们可以将MVC架构模式抽象为如下结构: 1.View层.View层即UI层,可采用的技术如JSP,Structs,SpringMVC等 2.Con ...
- [转]系统架构演变--集中式架构-垂直拆分-分布式服务-SOA(服务治理)-微服务
一.系统架构演变 1.1. 集中式架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键. 存在的 ...
- [转载]从100PV到1亿级PV网站架构演变
原文地址:http://www.uml.org.cn/zjjs/201307172.asp 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不同的方法,不同的方法下有 ...
随机推荐
- AOJ 0121: Seven Puzzle【BFS】
From: AOJ 0121 思路:与前几题的bfs不同,这次的bfs没有明确的移动对象,看似任意一个数都可以当成对象移动.这时我们只需要抓住一个格子就行,比如我们把0作为移动对象,那么0在地图中漫游 ...
- oracle函数简析
(一).数值型函数(Number Functions) 数值型函数输入数字型参数并返回数值型的值.多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, ...
- Java 之 异常处理
1.异常: a.问题(Throwable):异常(Exception).错误(Error) 异常(Exception):运行时异常(RuntimeException).编译时异常(Unhandle ...
- Qt经典出错信息之undefined reference to `vtable for classname
原文链接:Qt经典出错信息之undefined reference to `vtable for classname 这个出错信息太常见了,用过Qt两个月以上的朋友基本上都能自己解决了,因为太经典了, ...
- 批发零售车销门店扫描打印一体移动销售POS机-移动终端销售O2O新模式
应用领域 终端及移动解决方案 方案概述 通过手持终端对数据进行采集并分析及汇总.利用WIFI网络和专用终端,实时上报终端的各种销量数据,如订单数据.销量数据.库存数据.补货数据.调货数据等. 业务价值 ...
- sqlite like 通配符 ,匹配区分大小写(默认不区分大小写)
在查询前先执行这个语句 , 1 时区分大小写,0时不区分 PRAGMA case_sensitive_like =0; select prod_name,PROD_PRICEfrom products ...
- 转载:安装ie driver和chrome driver
很多同学在使用webdriver的时候总是忘了安装ie driver和chrome driver, 因此在这里简单介绍一下这2个driver的安装方式. IE driver 在新版本的webdrive ...
- 伪Textatea的构建(div+table),以及相应的滚动条问题与safari上的优化
在页面中创建一个不可编辑的文本块,并且文本块的篇幅较大,第一反应是创建一个textarea,并将它的disabled="disabled",并设置相应的scroll属性,就可以构建 ...
- jsp使用EL表达式回传boolean值出错的问题
在最近做的一个项目中使用session回传的属性中有一个为boolean,报出错. 属性名字为"isAdmit",布尔类型.后来我上网查了一下,是因为我使用了Myeclipse的自 ...
- python RecursionError: maximum recursion depth exceeded in comparison错误
处理快速排序,递归深度可能非常大,而系统默认的深度可能没有这么大 需要设置最大递归深度 import sys sys.setrecursionlimit(100000) # 这个值的大小取决你自己,最 ...