微信号:infoqchina

介绍:有内容的技术社区媒体

第三只眼:熊猫乱谈——Ember.js那点事

2013-12-13 18:05 水羽哲

如果持续关注每周五微信内容的同学一定知道,熊猫君除了是个吃货之外,还会写代码,所以偶尔有个新的想法了就自己吭哧吭哧在那里实现,最近突然把注意力放到了Web端应用上面,之前都是用flask写后端,然后前端的页面都是十分凌乱的模版render出来的,js没有什么逻辑可言,所以当有一天我看到距离2014只有不到一个月的时间,而2014年北欧又会有一次世界末日的困扰之后,我决定要做点有意义的事情:学会用js写前端的逻辑。


当然,我说的用js并不是简单的使用jQuery来操作下DOM,而是实现一个可以运行的SPA(Single Page Application),当前有很多的框架可以选择,比如Angular、React、Backbone,一个个拎出来都深藏功与名,后来我想起了大学期间看到的Ember,再次去看了看,逻辑清晰、代码简洁,严格的MVC,借鉴Rails的“约定优于配置”的原则,让人一见倾心!


一般大家使用了一个框架之后,一定想看看这个神奇的框架背后都有什么,据说Ruby语言的发明人Matz在看了DHH的Rails代码之后,不敢相信的问:“这是用Ruby写的?”哈哈,Matz桑,Ruby是你写的吗?后来,找到了一篇tutsplus对Ember.js的创始人做的采访,觉得很有意思,拿出来以飨读者。


项目的历史


Yehuda,Ember.js的项目Lead大学的时候是一个会计,辅修各种历史、新闻、历史学科,从此可以看出是一个文艺小清新的人,但是他忘掉了一点,就是会计本身就是一个boring的工种,所以导致他最后走向编程的道路,但是说起来也好玩,开始的时候Yehuda拒绝了计算机专业,因为他觉得BASIC是一门玩具的语言,而C又太让人费解……


后来这哥们去做网页设计师了,因为他认为和平面设计差不多,不过想想思路各种奇妙呀,后来发现“一入宫门深似海”,必须要掌握一些真正的编程技巧,好在当时的jQuery和RoR社区都刚刚起步,所以也有参与感,不过投奔了Rails的一个竞争的项目Merb,但是随着时间的发展,他们发现自己的核心观点和Rails是如此的相似,都是把模块化的框架带给开发者,所以后来他们环顾了周边的编程环境,发现Web前端还缺乏一个理想的框架,于是,一个新的想法诞生了。但是开始的时候,他们把重点放在了带有数据绑定的模版引擎,后来成为了Handlebars。这时他们有了第一个感悟:


The best DSL for HTML is HTML!


后来SproutCore的创办者Charles Jolley知道他在这个项目上做贡献之后,他建议把模版放到SproutCore中,所以他就带着模版理念过来了,加入了Charles 的公司Strobe。这个时候,Ember.js的另一个领导人Tom正在Apple为这个开源项目贡献,说到Tom也十分有趣,因为他也不是计算机专业,开始的时候他只是在苹果的Genius Bar做零售人员,但是他通过自己学习Cocoa开发简化苹果店官方提供的一些工具而被邀请参与苹果的SproutCore团队,后来的MobileMe团队还邀请他协助改版。


所有人都到齐了,大家也开始携手改进代码,但是他们发现之前的重心有很大的问题:

  1. 太关注模版引擎了,这个只是整个框架的一部分,而且在性能方面也有很多优异的模板引擎,现在的SproutCore 1.0 简直是在做一个大型的模版引擎,他们希望能够将程序打造成一个框架,能够为开发者提供良好的代码、模块组织能力;

  2. Cocoa UI的方向,因为受到Cocoa的影响,他们开始的时候十分喜欢Cocoa UI组件移植到Web的功能,但是你要知道对于web开发而言,固定的界面其实是最不重要的,你懂得……

后来Strobe被Facebook收购了,当然这对于所有人都是一个很好的结局,但是他们觉得还是想把SproutCore做完,所以就开始了一个新的项目SproutCore 2.0,也顺带成立了一个新的公司Tilde。


说了半天还是不见Ember.js的影子,不要着急,后来的SproutCore就改名成了Ember.js,其实就是之前的2.0版本,但是你知道,他们现在做的东西完全是推倒重来,所以让大家意识到这个问题,同时抛开历史的包袱,他们决定将名字改成Ember.js。


其实,2011年,这个时候已经有一些MVC的框架展露头角,所以必须会被问到的一个问题是“YAF(why another framework?)”,对于这个问题,Tom说,这些其他的框架名不副实。


目前的Ember.js已经发布了1.2.0版本,你可使用自带的Ember-Data简化大部分的CURD的代码,还记得当年的15分钟简历一个blog系统的例子吗,这个浪潮又来了!


8个人的核心开发团队


目前的开发团队只有8个人,当然还有社区的力量,对于一个项目的参与人员的大小,Yehuda说,其实把Ember.js项目开源是一个“鸡生蛋、蛋生鸡”的问题,你需要一个优秀的项目吸引牛掰的人,但是牛掰的人关注哪些牛掰的项目,所以二者如何达到平衡很微妙。现在我们更希望把注意力放到结局解决具体的问题上,但是大家会因为你对他们所关心的问题进展缓慢而怒不可遏,所以保证核心开发团队分享一个共同的愿景是十分重要的!


基于URL的设计


在当前的互联网中,你如何给你的朋友分享资源?通过链接,所以一个良好的链接对于Web应用是至关重要的,所以Ember.js的核心重点是关注在URL上,在这个点上,Ember.js团队把Route放到了前面而且是核心的位置,这样一来,你的设计就是面向URL friendly的。


Discourse


当你谈到Ember.js以后必然不会绕过Discourse,这个致力于打造接下来十年的论坛系统,因为把Ember.js的功能放到风口浪尖,对于Discourse,Yehuda很高兴的说,虽然是一个内容论坛系统,但是他们很好的设计了URL,而且几个人的团队在做如此一个负载的事情也是十分令人钦佩的。


与Rails的关系


如果你刚开始使用Ember.js的时候一定会发现,他和Rails是多么的想,MVC的命名方式、逻辑的分割……对此,如果你看过Ember.js的历史一定会发现其实二者之间的必然关系,他们的创始人都是前期的Rails的忠实用户或者忠实的竞争者,所以他们从Rails中借鉴了很多重要的东西,比如:“约定优于配置!”


最后,如果你还没有用过这个框架,可以看一看,因为熊猫君有C# MVC的背景,所以当时看到这个框架的时候特别亲切,虽然是Cocoa的port,但是还是“一见如故、相见恨晚”呀ಥ_ಥ 


“第三只眼”:主要由InfoQ编辑专门为微信公众账号自编自写的一个栏目,旨在表明编辑态度及表述平日见闻和思考,期望成为和读者沟通的桥梁。亦接受投稿:editors@cn.infoq.com


今日专栏作者:

水羽哲(@麦可思哲),InfoQ中文站内容运营编辑,爱代码、爱美剧、爱动漫,进击の编辑,每周五微信准时值班!


***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 免费!全网!这个才是真正听歌和下歌神器|黑马三分钟 不懂“库存控制”您凭什么做CIO? 平安金融科技移动技术周报(第三十五期) 活动推荐|敏捷之旅 Agile Tour 西安站 前端福利,推荐10 个又短又小,但非常精悍的 JavaScript 代码段