AngularJSAngularJS是web应用的下一个巨头。 AngularJS如果为创建web应用而设计,那它就是HTML的套路了。具有数据绑定, MVW, MVVM, MVC, 依赖注入的声明式模板和出色的可测试性都是用纯客户端 JavaScript来实现的! AngularJS 是一个创建富客户端应用的JavaScript MVC框架,它组织良好,经过严格测试,多功能,强大并且十分灵活。你仍然需要具有服务端后台,但大多数的用户交互逻辑将优雅地放到客户端上处理。 AngularJS是一个开源的web应用框架,由Google和社区进行维护,它可以创建单页的应用程序,一个页面的应用仅仅需要HTML,CSS和JavaScript在客户端。它的目标是增强页面的模型-视图-控制(MVC)的功能,为简化开发和测试。 它是一个建立在厚客户端的清爽的新模块web应用程序。一个健壮的框架建立在商业应用网络上。它鼓励最佳实践,开发模型和开发高质量的可维护的模块化应用程序。它的团队是世界一流的,社区是极其出色的,它结合最棒的功能来创建web应用。 AngularJS 允许你编写客户端的web应用程序,如果你有一个智能浏览器。它允许你使用好用的旧式的HTML作为你的模板语言,允许你扩展HTML语法来清晰、简洁的表达你的应用组件。它通过双向数据绑定使你的UI(视图层)与你的JavaScript对象(模型层)的数据自动同步。帮助你更好的构建你的应用和更方便的测试,AngularJs告诉浏览器如何依赖注入和控制反转。它帮助改良了允许异步回调和延迟、使客户端导航和深层链接使用哈希bang格式地址和HTML5 pushStat与服务端通信更容易。 Angular 提供了:
AngularJS 是基于声明式编程模式 是用户可以基于业务逻辑进行开发. 该框架基于HTML的内容填充并做了双向数据绑定从而完成了自动数据同步机制. 最后, AngularJS 强化的DOM操作增强了可测试性. 设计初衷:
架构
AngularJS的关键特性可测试性,依赖注入,逻辑/视图层的分离,还有设计者和开发者之间的协调合作是一个开发者对一个框架最期待的几样东西。Angular绝对满足上述要求。在JS领域,Angular能适配这写令人耳目一新的要求看起来是多么惊人。
双向数据绑定:数据绑定可能是AngularJS里最酷,最实用的功能。 它将节省你大量的样板代码编写。 一个典型的Web应用程序可以包含多达80%的代码基础,如遍历,操作,并听取了监听DOM。 数据绑定使得不用编写这些代码,这样你就可以专注于你的应用程序。 考虑下你的应用程序的模型为单源信任的。 你的模型就是你去读取或更新应用程序中的任何东西的地方。这种投射是无缝的,不需费你一兵一卒。AngularJS双向数据绑定会处理DOM和模型之间的同步,反之亦然。 模板在AngularJS, 模板就是原生的HTML. 做了基于视图的增强. 这样做最大的好处在于拉近了开发与设计人员的工作流. 设计人员操作HTML完成设计,开发直接在HTML上作相应的功能开发.
MVCAngularJS引入了软件设计的MVC模式.这对于使用者来说仁者见仁智者见智. AngularJS并不是完全的MVC而是 MVVM (Model-View-ViewModel).
model就是数据模型 就是一些JavaScript 对象. 没必要从父类继承,代理包装亦或是使用getter/setter来使用. 使用vanilla JavaScript 十分方便便捷.
视图就是提供特殊数据或方法来支持特定场景的对象. 视图对象就是 $scope. $scope就是个简单的js对象,提供一些简单的API监控其状态.
控制器起到设置 $scope对象的初始状态及后续的动作关联。
在.AngularJS处理完相关的业务逻辑进行HTML模式的展示。 这样就奠定了应用的架构. $scope对象拥有数据的引用关系, 控制器定义行为, 视图处理页面展示布局以及相应的处理跳转.
依赖注入 |
在与其他JS MVC框架的争战中,AngularJS已经胜利了。它已经证明了自己是所有JS MVC框架中最成熟的。下面是来论证的数据 社区支持 (数据来自Github.com)
(数据来自StackOverflow.com) 随着时间推移,兴趣的趋势
(2011年8月-2014年6月)
(上一年) 使用统计
特性对比
用户入门
工作趋势
| 0x0bject |
|
Dojo Toolkit:
Dojo Toolkit是一个致力于简化跨平台JavaScript/Ajax应用和网站的开源模块化JavaScript类库. Dojo是一个面向大规模客户端web开发的JavaScript框架. 例如, Dojo抽取出一个屏蔽各种浏览器差异的API集合. 此外, Dojo的功能还包含: 定义了模块化代码的框架, 并管理他们的相互依赖关系; 提供构建工具集, 可以用来优化JavaScript和CSS代码, 生成文档并且运行单测; 支持国际化, 本地化和无障碍(accessibility); 提供了丰富了通用工具类和用户界面组件(Widget).
社区支持
| AngularJS | DOJO |
关注/收藏数 | 25760 | 300 |
Fork次数 | 9136 | 216 |
贡献者 | 877 | 59 |
发布次数 | 92 | 147 |
MVC
Angular开发团队已经将MVC设计模式以多种方式引入到Angular中, 因此会使得开发也必须跟随这MVC设计模式. AngularJS并没有以传统的方式实现MVC, 而是更接近于MVVM(Model-View-ViewModel), 因此有时被统称为MV*. MVC是Angular的核心, Angular为MVC设计模式提供了原生的支持, 可以轻易将其应用于web应用程序的开发中.
Dojo的Toolkit为JS应用程序提供了实现MVC的独立工具包. Dojo并没有为JS应用程序提供完备的MVC实现, 而是根据应用程序自身需要, 选择性使用其中的MVC工具/组件. Dojo提供MVC功能的包是dojox/mvc.这个dojox/mvc包主要关注客户端的View到Model的数据绑定, 仅提供了在一个View中的数据绑定/控制器的支持, 并未提供在应用程序级别的跨多个View的支持(例如, 导航(Navigation)的支持).
在Dojo中,MVC应用中的级别关注点比如路由或者导航等必须使用另一个包(dojox/app)来处理,而在AngularJS框架中,这些关注点都是框架自身就能处理的。
dojox/mvc模块的状态现在仍然是“Experimental” ,所以它仍然是不稳定的,正如下面这篇文章所说的(http://dojotoolkit.org/reference-guide/1.10/dojox/index.html#dojox-index),而Angular则是一个经过了更多的验证、稳定而成熟的JS MVC框架。
SPA
AngularJS是一个流行的全功能的SPA框架。AngularJS的一些固有特性支持了单页面应用的开发。Angular通过下列特性来支持SPA:
内嵌视图(Nested Views)
控制器(Controller)继承
路由(Routing)
Dojo通过其Dojox/app包实现其构建单页应用的目标。这个包是个小型的应用框架,提供了一组类,用于管理部署在移动设备或桌面系统上的单页面应用的生命周期和行为。该应用框架被设计成只需简单配置一个配置文件,由潜在的嵌套视图组成应用,并便于这些视图之间的过渡。
使用Angular开发单页面应用,可以很好的集成整个框架,同时框架提供了MVC功能,例如路由,控制器,视图和单页面应用模式是紧密结合的。Dojo中的Dojox/app则是一个独立的组件,并未将单页面应用与MVC紧密结合,因此,Dojox/mvc在使用的时候必须通过配置Dojox/app来管理解决,而这在Angular中是自带的,而且容易使用的。
UI 挂件和库
Dojo提供了底层系统所支持的大量的widget(用户接口组件).Dojo的UI库称为Dijit,使用一个单独的命名空间"dijit".
Angular确实提供了一个UI widget工具集,但是没有Dojo所提供的广泛.Angular允许随意使用流行的第三方UI库.它提供了名为"Angular-UI"的UI库,这个库包含各种流行的第三方库的widget和模块.其中,UI-Bootstrap模块将Bootstrcp框架的所有widget作为Angular指令.
由于Dojo是一个工具集,所以它的任意一个工具都可以不依赖于Dojo生态系统而单独使用.因此,Dojo的Dijit和其他流行的UI和widget库,如JqueryUI和其他jquery或js插件,都可以将它们包装成指令后,在Angular应用程序中使用.
RESTful Interation
AngularJS使用angular-resource(ngResource)模块来提供RESTful交互功能,该模块表示一个REST资源并提供帮助方法(GET/POST/PUT/DELETE)来轻松的实现RESTful交互。另外也提供其它的可选模块。
Dojo使用dojo/store/JsonRest来提供RESTful交互能力。它是一个轻量级的对象存储实现,给那些具有RESTful数据交互能力的HTTP客户端来使用。
AngularJS和Dojo都提供了大体相当的RESTful交互能力。
可维护性
AngularJS提供了一些特性,让拥有大量代码基数的应用程序变得可维护.这些特性如下:
AngularJS 鼓励和增强最小化DOM操作,推荐只在HTML中使用的指令中展现DOM操作.这样可以避免由于大量使用DOM和DOM事件等产生的"意大利面"式的代码.这些代码在大的web应用程序中难于调试和跟踪.Angular指令也为增加了HTML语义.
Angular提供了一些类似模块的特性,它允许应用程序开发者,将不同部分的应用程序逻辑打包成模块,以增加应用程序的模块化和可维护性.
Angular提供了DI (依赖注入) 设计模式的固有特性,它帮助应用程序保持模块化和易读性.
项目结构框架对于AngularJS已经可用,可以用来开发可维护的企业web应用程序.
Dojo没有提供最小化DOM操作的技术,这样,对于大型web应用程序,DOM操作增加了趋向于“意大利面”式代码的可能性,也影响了应用程序的可维护性. Dojo支持模块(AMD),但是没有为web应用程序提供DI模式.
数据绑定和视图模板化
商业web应用程序的数据中心原则要求来自模型的数据和UI同步更新.对于一个商业web应用程序,动态视图必须依赖于模型数据而创建.Angular提供了相当简单和已有的技术,声明式的编写绑定到模块数据的动态视图.在Angular里面,视图模板化使用包含Augular专有的元素和属性的HTML编写.使用HTML作为模板化语言,对于开发者而言,更易于创建和理解视图.Angular结合了来自模型和控制器的信息模板,用来渲染用户在浏览器中看到的动态视图.Angular使用了双向绑定特性以保持UI和模型的同步.
同样的特性也可以在Dojo中使用,但是,它们和Dojo工具集的流程不太协调,也缺少了这个特性的简单和细微化.
声明式的用户接口
AngularJS 提升了HTML视图的 声明式设计(declarative design)。在视图层,使用HTML作为模板语言让它变得相当容易开发创建视图,同时也变得易于理解,在视图语义上也有利于其他开发者。Angular提供一个特性,被称为“directives”,它可以根据领域的需要,来提高HTML的定制性。
声明式设计(declarative design)可以在Dojo应用中通过使用data-*属性运行,但是它跟Angular的“directives”特性不一样。
支持 AngularJS 能更好的进行 IDE 和浏览器调试
Netbeans IDE也为AngularJS提供了内嵌的支持,它让使用AngularJS可以简单的开发web应用程序.(http://wiki.netbeans.org/NetBeans_80_NewAndNoteworthy#JavaScript)
Angular团队也为Google Chrome浏览器创建了一个名为Batarang的插件,它提高了使用Angular开发应用程序的调试体验.这个插件旨在简化性能瓶颈的检测,以及提供GUI来调试应用程序.
使用Dojo的时候很难在大型团队中保持代码的统一
Dojo中的编程模型是使用widget,当拓展它们的时候,它们将你的代码包围住.你仍然在编程来操作DOM,连接/注册/取消注册事件.Dojox/mvc并没有生成模块化的代码.在Dojo中有多余2种或3种的方式做同样的事情.其中一些甚至是糟糕的实践,但是并没有被清除.很难在大型团队中加强代码的统一,因为Dojo没有为模块化和统一化的web应用程序提供整体的框架.
AngularJS提供了一个全面的框架,包含MVC的核心及规划模型,具有均匀性,可理解性和模块化。AngularJS只为模型提供嵌套的控制器。良好的测试应用程序隔离的部分。定义良好的相关性。大部分时间你不写代码操纵DOM自身。但你可以在创建指令(组件)时这样做。没有命名空间混乱。你的对象从来不会出现在全局命名空间中,好像一切都封装在Angular的应用中。MVC模式是核心。你的应用程序是一套控制器,服务,过滤器和自定义指令。
本文意图让我们知晓web应用的未来就在眼前。并尝试概述一个正确的有指导意义的方法来结构化和设计一个web应用,使之能适应web世界。本文概述了客户端JS MV*框架的使用,并说明了为什么用客户端MVC框架组织的web应用很适合实现web应用。
本文集中分析和总结了在成熟的客户端MVC框架下的对比,并提供一些对比的统计信息,帮助你和你的团队决策,选择出适合你的web应用的客户端MVC框架。
本文偏向于AngularJS框架,你可以有不同的偏好。对我来说AngularJS是我个人的喜好所在,在我眼中是其他客户端MVC框架所不能匹敌的。