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的架构演变的更多相关文章

  1. [转载]大型网站应用中 MySQL 的架构演变史

    没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...

  2. Mysql在大型网站的应用架构演变

    原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/本文链接地址: Mysql在大型网站的应用架构演变 本文已经被多处转载,包括CSDN推荐以及码农周刊等等,阅 ...

  3. 从100PV到1亿级PV网站架构演变

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不 ...

  4. 大型网站应用中MySQL的架构演变史

    没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...

  5. 转:Mysql在大型网站的应用架构演变

    原文来自于:http://www.cnblogs.com/Creator/p/3776110.html 原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/本文 ...

  6. MyCat 启蒙:分布式系统的数据库架构演变

    文章首发于[博客园-陈树义],点击跳转到原文<MyCat 启蒙:分布式系统的数据库架构演变> 单数据库架构 一个项目在初期的时候,为了尽可能快地验证市场,其对业务系统的最大要求是快速实现. ...

  7. 浅谈JavaWeb架构演变

    一  JavaWeb架构演变 在java架构模式中,我们可以将MVC架构模式抽象为如下结构: 1.View层.View层即UI层,可采用的技术如JSP,Structs,SpringMVC等 2.Con ...

  8. [转]系统架构演变--集中式架构-垂直拆分-分布式服务-SOA(服务治理)-微服务

    一.系统架构演变 1.1. 集中式架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键. 存在的 ...

  9. [转载]从100PV到1亿级PV网站架构演变

    原文地址:http://www.uml.org.cn/zjjs/201307172.asp 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不同的方法,不同的方法下有 ...

随机推荐

  1. SVN基本指令

    Svn使用: Versions: Cornerstone: 如果命令行不出来,可以设置commonsline Tools 命令行:svn heip 获取服务器端数据 svn checkout 远端ur ...

  2. viewgager

    CycleRotationView:自定义控件,主要功能是实现类似与各种商城首页的广告轮播图.其实像这种比较常见的自定义控件早就满大街了,虽然说"不要重复发明轮子",但是不代表不用 ...

  3. webform文件上传、图片水印、验证码

    文件上传: 所用控件:FileUpload 使用时的思路: 1.判断用户是否选中了文件 FileUpload.FileName获取选中的文件名,判断长度,如果长度大于零就代表已经选择了文件 JS端:通 ...

  4. Linux学习笔记(15)-信号量

    在多线程或者多进程编程中,有一个非常需要关注的东西,那就是同步以及互斥问题. 同步是指多个进程之间的协作,而互斥是指多个进程之间,为了争夺有限的资源,而进行的竞争. 理论很高端,但经过自己几天的学习, ...

  5. css3控制标题字数超出的部分自动显示为“...”省略号

    css3功能强大,可以让超出指定宽度的部分自动显示为"..." 代码如下 display:block;text-overflow:ellipsis;white-space:nowr ...

  6. spark scala学习笔记

    搞清楚几个概念: 闭包 柯里化 搭建了intellij idea 的scala 开发环境

  7. windows 10 开始菜单和cortana无法工作的问题

    过了个周末,到了实验室一开机发现报了个关键错误:开始菜单和cortana无法工作. 经过一番google ,发现问题,原来是360禁用了一个服务导致,这个服务是UserManager. 我直接去开启发 ...

  8. LintCode 78:Longest Common Prefix

      public class Solution { /** * @param strs: A list of strings * @return: The longest common prefix ...

  9. [RxJava^Android]项目经验分享 --- 递归实现

    介绍一下业务逻辑:获取接口数据,根据接口内容判断是否需要继续获取数据. 本文使用递归思路,通过RxJava来实现此功能,获取数据的Observable直接用模拟的Observable.just()替代 ...

  10. 关于 Raphael

    Raphael Javascript 是一个 Javascript的矢量库. 2010年6月15日,著名的JavaScript库ExtJS与触摸屏代码库项目jQTouch,以及SVG.VML处理库Ra ...