• 从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的调整并使用到新项目的开发,具体如下:

    https://images0.cnblogs.com/blog/47784/201408/312227322046408.png

    image

    image

    到目前为止,还没有发现Angular有什么大的技术难题或者性能问题,如果有Angular项目经验的朋友,不妨留言讨论,学习共勉!

    另外,很多人发邮件问WPF是否会像Silverlight一样消亡,其实这个问题很难回答,尤其在目前这个不光是微软主导的开发环境下(HTML5流行度远甚于XAML,IOS和Android的大行其道与Windows Phone的不温不火,Windows的命运尚不知晓),可能连微软自己也不能很好地解答这个问题,所以一切只能由市场和时间来慢慢决定。

  • 相关阅读:
    如何改计算机用户名
    解决windows弹出'你可能是盗版软件的受害者...'及去除自动更新图标
    关于复制文件出现“Thumbs:访问被拒绝......”的解决办法和相关知识
    <百度分享平台>透明FLASH模块的方法
    绝对性解决打开我的电脑打开文件夹在新窗口中打开问题
    Git忽略规则(.gitignore配置)不生效原因和解决
    汇编学习笔记18
    汇编学习笔记21
    汇编学习笔记16
    汇编学习笔记22
  • 原文地址:https://www.cnblogs.com/KnightsWarrior/p/FromKnockoutToAngular.html
Copyright © 2020-2023  润新知