打开读读日报下载读读日报

徐飞:如何评价 Angular 2 发布 Beta 版本?

如何评价 Angular 2 发布 Beta 版本?

徐飞,三流程序员,二流架构师
Angular 2是一个重量级前端框架,明显比Vue重,作为全业务解决方案来说,大致和React整合了一堆东西之后在一个数量级。

这么重的一个东西给谁用呢?两种场景:基于Web的企业应用,混合应用(包括桌面端和移动端)。

我们可以发现,什么样的人非常欢迎Angular这么个体系,那就是有Java背景的Web开发者,这部分人大部分在做的就是各种管控系统,包括CRM、ERP软件,云平台之类。而且,需要在这个领域中算是比较有前端意识的人,才宁可倾向于Angular而不是ExtJS。

尽管在整个前端开发圈中,大家并不是很欢迎Angular,而且很多人认为它的1.x版本已经衰落,但我跟 @小猪有个观点是一致的,那就是:“在企业开发领域,ng1的应用才方兴未艾”,也就是说,它在这个领域其实还是上升阶段。

为什么呢?还是因为缺少对手。我们可以对比一下几个竞争对手,看看为什么这个领域的人更愿意选择Angular。

  • Vue,从前端的角度看,Vue有一万个好,Angular有一万种令人不满的地方,但企业领域的人偏爱集成解决方案,哪怕这个方案的语法是粗陋的,配置是繁琐的,连Java都用了,还怕这些?更关键的是ng1非常贴合Java开发人员的习惯,所以只要搞过Spring这类东西的,经过简单培训,写配置页面极其熟练。
  • React,与Vue相比,React还强制组件化理念,但是绝大部分管控系统其实是不需要组件化的,在这类系统中,模板比组件更便捷。
  • ExtJS,这个会在企业领域有不少市场,但随着用户对UI多样化的需求增加,不少人会逐步选择弃用它,而且它的开发效率并不算高,唯一优势是组件丰富而且适合企业领域。
所以,综合来看,如果你有一个这个领域的系统要开发新版本,仍然没有太好的选择。

再看看Angular 2,一年前,我曾经回答过相关的一些问题,在这篇的评论中,有过对于版本发布时间的预测:Angular 2.0与1.3版本相比,有哪些方面的改进呢? - 徐飞的回答,现在看来,大致是准确的,为什么我当时觉得要这么久时间呢,有这几方面的考虑:

  • 太受关注了,大家对1.x的吐槽那么多,开发团队肯定亚历山大,所以很多他们的想法都会不自觉被这些言论引导,而且整个过程一直公开,在很多点上,会有争议,其实不一定非要改那么多的,可是你挡不住每个人都把他所拥有的认知往上加。做框架的时候,核心团队只能有2-3人,不然不可控因素太多了。《商君书》教导我们:民不可与虑始,而可与乐成。从决定一个框架流行度的因素来说,事后的宣传和社区运营要比设计过程重要得多,只要不出致命问题,都可以认为是没有问题,是feature而非issue。
  • 想要做的事情太多了。比如说,可选渲染引擎,可选模块系统,考虑支持同构模式,考虑支持Native渲染,而且一会要考虑集成Rx,一会要考虑是否引入Imuutable,随时受到社区流行元素的影响,总是企图一劳永逸,这是不可能的事,没有哪个前端框架能够一次搞出拉钩上吊一百年不许变的模式,能选用Angular这样框架人,基本都会用默认配置,不会真的这么geek到自己替换模块的,要能这么干,他早就用Vue去了。
所以,我觉得做到现在,Angular团队的人自己也迷惘了,早期Rob Eisenberg离开创立了Aurelia框架,近期这个库:angular/watScript · GitHub,都反映出内部的人思想上的斗争与困惑:我们到底想要什么样的东西?从过程来看,这是必然的事情,可以预见到现在这种局面。

其实,以现在Angular 2 Beta版所拥有的东西,已经非常超前了,但这个超前有没有用呢?说实话,不会很大。两个方面看:

  • 能不能吸引到新用户?能吗,绝对不会有想象的那么多,为什么呢,因为一个成熟的开发人员,他考虑技术选型,并不是你很先进我就会用,而是要看你是否适合我的业务形态,对我的人员是否增加太多学习成本,能否带来明显的好处。至少现在没那么明显,等HTTP2普及度更高之后,或许会好些。
  • 能不能拉住老用户?能拉住一些,但失去的可能更多些,失去的原因主要还是一年前自己的那些豪言壮语。其实ng1.x真的那么不堪吗?不见得,只要把module机制这样的问题修改一下,仍然还是个很不错的框架,而且1.4和1.5版本加入的不少东西,也是非常有优势的,可惜很多见到风就是雨的人,会被那些言论吓跑了,不会持续关注。

小猪的答案中提到另外一点:

面向component编程是解决界面复杂性的好手段,但是,同样会带来代码复杂度上升的代价,从我的实践来看(不是angualar),这个平衡很难把握,而且有些懒惰的开发人员也不是很乐意在开发中仔细的拆分组件。

深表同意,我个人前一段时间写的《Web应用组件化的权衡》:Web应用组件化的权衡 · Issue #22 · xufei/blog · GitHub就是阐述这方面观点的。

另外,对于开发语言的变更,很多人觉得是个问题,但我觉得对于企业开发者来说,这个还属于可接受范围。

莫大艺术家 的回答中,把ng2和ng1的升级比作as3和as2,非常好的比喻,赞。

好了,说点总结吧:不管怎样,终于发布了,是好事。新版本更加强大优雅,但学习成本也更高了,这里面很多理念,对新时代的前端来说确实是必备技能(ES 2016,TS,Rx等等),从这个角度看也可以理解。能不能达到ng1曾经拥有过的辉煌,不得而知,80%的可能性是没有。

我要吐槽的比较重要的一点是:

我认为如果组件要依赖其他组件,其import过程应当放在html模板中,而不是放在ts代码里。MVVM三层,明显越上层越属于配置层,组件依赖数据配置信息,应当放在模板中更合适,对比一下这篇提出的跟Aurelia的对比:

http://blog.durandal.io/2015/05/20/porting-an-angular-2-0-app-to-aurelia/

另外,个人对Angular 2这次的Beta版有个猜测,官方其实还没有这么早把它推出的准备,因为官方从1.3版本之后,又陆续创建了1.4和1.5两个版本,当初说好1.3就终止的呢?可见自己并没有信心,这次推出ng2的Beta版,很可能是受到Aurelia前一阵发布Beta版的刺激所致……

附带说句话,最近这些五花八门的框架,近期看,没有谁能够取代谁,有很多人拿出自己的作品来证明所用的东西好,其他框架不行,其实。。。是因为不管用哪个东西,都能做出你这样的作品。尤其是管控类的系统,还是那句话:轻量级的管控系统,至少有一百种做法。
扫描二维码下载读读日报
© 2015 知乎

读读日报

发现更多新奇领域
在读读日报,还有上万个主编与日报。
打开读读日报
© 2017 知乎
请在浏览器中打开