mvvm框架

网上的mvvm框架好多,整理一下网上的评论,仁者见仁,智者见智吧 ,比如

vuejs angular knockoutjs avalonjs emberjs WinJS(前三个学习过,后边都没看过)

兼容性:angularJS(IE9), EmberJS(IE8), KnockoutJS(IE6), WinJS(IE9),avalonjs(IE10)

Vue.js 

我们的玉溪大神开发的

优点:

  1. 简单:官方文档很清晰,比 Angular 简单易学。
  2. 快速:异步批处理方式更新 DOM。
  3. 组合:用解耦的、可复用的组件组合你的应用程序。
  4. 紧凑:~18kb min+gzip,且无依赖。
  5. 强大:表达式 & 无需声明依赖的可推导属性 (computed properties)。
  6. 对模块友好:可以通过 NPM、Bower 或 Duo 安装,不强迫你所有的代码都遵循 Angular 的各种规定,使用场景更加灵活。

缺点:

    1.个人项目。

    2.更新太快。

AngularJS

优点:

    1. 动态视图:以前从来没有想过js可以如此扩展HTML的属性,但是AngularJs做到了,它替我们静态的HTML加了很多扩展性功能,有一种让HTML由死变活的感觉。
    2. 完善:是一个比较完善的前端MVW框架,包含模板,数据双向绑定,路由,模块化,服务,依赖注入等所有功能,模板功能强大丰富,并且是声明式的,自带了丰富的 
      Angular 指令。
    3. Google维护:AngularJS有Google来维护,无疑有了一个强大的后台,对于推广和维护明显比Vue.js和avalon有优势,社区也非常活泼,能够很好促进它的发展。
    4. AngularJS & Ionic:Ionic: Advanced HTML5 Hybrid Mobile App 
      Framework,这俩就是一个好基友,Ionic通过用AngularJS为了创建一个框架,最适合开发的丰富和强大的应用程序。上次于知乎答了一个相关问题: 
      做webapp开发,性能和效率最好的框架和打包app平台分别是哪个? 
      • 汤威的回答,详细可以见这里。

缺点:

    1. 大而全:学习起来有难度,对于我来讲学习曲线很曲折,比较难理解一些。
    2. 推翻重写:前段时候逛社区发现AngularJS2.0会把之前的推翻重写,两个框架的改变很大,基本是两个框架了,等于是说等到2.0出来后又需要从头开始,不过又说回来,@徐飞老师的[翻译]有关Angular 
      2.0的一切 · Issue #8 · xufei/blog · GitHub这篇文章很好说明了AngularJS2.0的变化。
    3. 不支持IE8以下,貌似2.0变得只支持移动端了,等到出来后再看吧。

knockoutJS

1、MVVC架构了解—viewmodel

把后端逻辑放到前端处理,前端把view与viewmodel之间绑定,并且对viewmodel的数据进行逻辑处理。而后端则是通过ajax把viewModel和model进行数据交换。(meteor则是进一步,直接在前端操作MongoDB(子数据库),然后子数据库和主数据库会自动进行数据同步)

2、数据绑定

angular的数据绑定是使用脏检查事件。 
knockoutJS可以选择为one way ,one time,two way绑定

ko.observalbe:对数据的get和set ko.computed:实时计算数据 applyBindings:对viewmodel进行应用。 
data-binding对函数和数据绑定:click\event\value\text等值的绑定 
Simple List:ko.observableArray

3、SPA

其实后台并没有太大改变,逻辑依然,只是把页面的处理逻辑交给了前端。让前端更加像一个APP。 
SPA:Single Page Application。使用ajax和服务器及数据库交换数据:服务器传输时只需要传输json,不传页面。使界面更加友好。个人感觉KnockoutJS适合开发SPA的原因就是MVVM的模型,多个Page共享同一个ViewModel,使信息传递更加简单。而angular则再进一步,使用Service、directive、controller给一个应用划分好层次,使结构清晰。ps:个人比较喜欢不同的page使用不同的控制器。

4、总结

KnockoutJS把逻辑移到前端后,但个人感觉只是提供一个雏形,而没有像angular一样进一步的给逻辑分层,让逻辑更加清晰,使代码维护更加简单。KnockoutJS仅提供了数据绑定功能实现了ViewModel。而angular则给人感觉实现了前端的MVC分层。 
但是无可否认的是,knockoutJS使用的开发思路和jQuery一致,都是先渲染DOM,再操作DOM。因此不需要太大的改变开发思路,导致学习成本没angular那么高。如果作为一个学习理解SPA和MVVM概念的框架,是比较好的。

posted @ 2017-02-09 10:25  飘然离去  阅读(392)  评论(0编辑  收藏  举报