BT

你的观点很重要! 快来参与InfoQ调研吧!

Juergen Fesslmeier谈端到端的JavaScript开发
录制于:

| 受访者 Juergen Fesslmeier 关注 0 他的粉丝 作者 Dio Synodinos 关注 2 他的粉丝 发布于 2013年7月3日 | ArchSummit社交架构图谱:Facebook、Snapchat、Tumblr等背后的核心技术
24:15

个人简介 Juergen Fesslmeier是一位网络、移动和开源领域的开发者,企业家,并担任wakanda.org的产品经理。他热衷于讨论JavaScript、移动网络、服务器端JS、NoSQL和Wakanda。还参与了网络标准的邮件列表,负责提供任何有关JavaScript、HTML和应用程序开发技术方面的建议。

软件正在改变世界;QCon目的在于通过促进知识和创新传播来推动企业软件开发领域的发展;为达到这个目标,QCon是作为一个从业者主导的会议来召开的,会议重点为那些在各自团队中发挥创新作用的人士们而设计,比如团队领导者,架构师,项目经理或工程主管。

   

1. 你好,我们目前正在QCon的2012旧金山会议的现场与Juergen Fesslmeier谈论有关Wakanda和端对端JavaScript软件栈的话题。你好Juergen,要不先来个自我介绍?

好的,首先我很高兴来到这里。我叫Juergen,是Wakanda公司的产品经理。我凭借网络开发方面的背景加入Wakanda&4D。以前做过许多开发工作,有Rails和Python方面的。过去十年主要从事网络开发的工作,还利用我在技术方面的知识参与一家新成立的公司开始创业。

   

2. 你能否向我们介绍一下Wakanda的产品和它所要解决的问题?

Wakanda是个一站式的开发和部署环境,由应用服务器(Wakanda服务器)和一个类似IDE的工作界面构成。所以它的特点就是非常简单易用,你不必像在其他环境中那样安装一些必备项目,基本上需要安装的就是一个完整的工具集,然后就可以使用你的业务应用程序做一些工作了。因此,我们的产品是真正的面向业务应用程序。

   

3. 你能否给我们粗略的介绍下Wakanda的结构和构建它所用到的技术?我想这大多数东西对于开发者来说都是不可见也不会触及到,对吗?

在现今的网络应用中你体验过各种各样的浏览器,很明显当开发网络应用程序的时候能想到的最容易的工具软件就是浏览器,其客户端框架与服务器框架通讯而服务器端转而与数据库进行对话,这些就是最基本的结构。在Wakanda中这一切都是使用JavaScript来完成,因而从前端到后台都是用Javascript来编码并且通过JSON和REST式的API之类的进行通讯。我们有个NoSQL的数据库,其中的数据以类似关系库的方式存储,你可以用SQL以你习惯的方式来建立模型并组织数据,当然啦,除非你不使用SQL。你可以通过点表达式和数据模型来设计业务逻辑,这都是Wakanda程序的核心功能。业务逻辑是内部核心,模型实际上是外部结构或者说架构,也是你的应用程序的实现方式,这是非常关键的。我们提供了一个客户端框架,并称其为WAF(Wakanda应用程序框架)。它主要负责处理与服务器端的通信和安全性方面的事物,所以用户和存取权限都是固化在框架中,而且有丰富的插件用于协助你像开发桌面程序一样编写浏览器应用程序。

   

4. 你谈到了数据模型和它如何完全基于JSON以及点表达式来实现,那么你能不能谈谈它与诸如MongoDB或者其他NoSQL数据库在查询接口方面的差别?

先从结构或者架构开始,它们基于数据类型构建。我们称之为数据类,类似于雇员或者公司的实体,就像你在规则库中看到的那样,具有某些JavaScript基本数据类型的属性。你可以使用相关属性丰富那些模型和数据类,例如模型中雇员类和公司类之间的关联关系。你也可以给基础的查询添加我们所说的计算属性以及给模型添加更加复杂的业务逻辑。所以你可以用上述方式实现抽象的业务过程。MongoDB和Wakanda之间的区别在于Wakanda是个关系型的数据存储,所以你可以用对象关系型的方式进行工作。它给人的感觉就像是对象关系映射,但它不是。并非是映射到SQL数据库,它是真正的模型即为数据库结构。

Dio: 我想你们也有些类似约束机制来保持所有事情有序性和一致性吧。

对于参照完整性等等,我们已经完全实现了。恰如我所说的,Wakanda也有一个安全模型。因为我们将用户和他们的角色设计到模型中而你在应用程序级别定义他们,然后就可以在其他解决方案中分享这些角色和读取权限,而在这些类型的应用程序中安全问题确实是一件很重要的事情。这样你能够保护小到数据类的简单属性,大到基于角色和用户的整个模型了。

   

5. Wakanda与其他服务器端JavaScript框架相比较表现如何?例如Node.js、Ringo等等。

我觉得这个就像是苹果和橘子之间的比较。我们实际上谈论的并不是同样的事情,如果你是从Rails开发转来的,你会说:“Wakanda更像是Rails”,因为它有一个非常固定的结构,规定了该怎么建立数据模型,建立数据类和如何扩展这些数据类。然而,Node.js是一个非常特别的异步调用模式的服务器端JavaScript的执行框架。另一方面,我们是多线程和多核心的,我们不要求开发者遵循异步的模型,Wakanda是一个同步的开发环境,基本上你只需要像用其他语言(如Python或者Ruby)一样来开发就行,只不过是使用Javascript完成这一切罢了。实际上这就是Wakanda最大的好处。

   

6. 你提到了Rails,使用Wakanda也会从数据模型开始吗?能获取任何生成的视图或者存根吗?

我们并不喜欢给用户生成许多代码,也没有那些在Rails开发界里使用的生成器。但是我们更偏向于做一个拖放组件的环境,所以准备了一个插件集以备选用。用户可以先藉此创建自己的基础视图,然后将所用控件拖放至此视图中。

   

7. 这个开发环境是运行在浏览器内的还是一个单独的应用程序?

现在它是一个基于Webkit引擎的独立应用程序,整个都是用HTML 5和Javascript实现的。所以我们在尝试云计算,一种基于浏览器的工作环境。到目前为止,我们收到了大量的反馈。你可以在一个礼拜后的会议上看到它,我们将会在台上现场展示。

   

8. 你们也有一些代码编辑器组件吗?

是的,实际上我们正在使用的是一个浏览器环境内的开源代码编辑器。我们在浏览器中调用它,在该工作环境中有一个编辑器和一个代码查找工具,主要用于帮助开发人员来指导完成功能原型等等,所以要有一个成熟的IDE,带有编辑器、调试器、断点、监视器以及所有你曾经在.NET开发时用过的工具,而且所有的这些都是像服务器一样集成在一起的。

   

9. 你们使用的是ACE编辑器或者其他一些编辑器组件吗?

在我们桌面版的开发环境中我们没有使用ACE不过我们了解到它推出了基于浏览器的版本。

   

10. 你怎么看待HTML 5这个网络平台和那些正迅速添加其中的新API的前景?还有你如何评价Javascript自身在ECMAScript 5和ECMAScript 6新特性之间的演变?

4D是W3C的成员,我们非常密切地遵循HTML 5和CSS 3的标准以及Ecma 5.1的设计规范。特别是在过去的几年中我们已经看到这个领域的巨大发展,来自于iPhone的推出,也有为HTML 5加入智能手机耳机。我认为这种推动带给许多人非常丰富的体验,也让人看到了HTML 5的能力。对于ECMA,我们的服务器端JavaScript兼容Ecma5.1,我认为在Firefox或Chrome浏览器中将会采纳许多ECMAScript 6的标准,其他浏览器可能也会在随后跟进。

   

11. […]我们有GWT来锁定时间,CoffeeScript和现在的Dart以及其他一些方法。你认为哪种方式更合适,或者说这些方法中哪个更有可能在未来的几年中是比较主流的,抑或你认为ECMAScript 6就已经足够了?

Dio的完整提问: 这些日子有场重要的辩论,是关于使用JavaScript应该用它自身还是要用某些前端汇编语言,人们对此有许多不同的做法。我们有GWT来锁定时间,CoffeeScript和现在的Dart以及其他一些方法。你认为哪种方式更合适,或者说这些方法中哪个更有可能在未来的几年中是比较主流的,抑或你认为ECMAScript 6就已经足够了?

这是个非常有趣的问题,也是个非常宽泛的问题。事实上我很欣赏那些我们称之为JavaScript方言的编程语言,比如CoffeeScript。我个人也曾看过CoffeeScript的资料并试着用了用。到目前为止我还没有用CoffeeScript配置过任何的应用程序,这主要是因为我习惯于使用JavaScript。CoffeeScript语言是非常美妙的,它确实为JavaScript开发人员添加了许多糖衣语法,TypeScript也刚刚宣布添加了类似的东西。我觉得这些都是很棒的方法,也肯定会对ECMAScript 6产生巨大的影响,如果仔细查看ECMAScript 6的细则,你会在其中发现许多相似性。若你从事过CoffeeScript开发,一定会发现有很多相似之处。

所以我个人非常喜欢它,我们对于它来说是不可知的。但是它并不是必须的,你并不需要使用那些语言亚种来提升效率。有许多其他的方法来构建JavaScript,我觉得你还可以学习那些最佳的实例,主要关注其如何开发大型应用程序。这也是我们想要交给我们的开发者的,给他们一个框架,一个他们可以遵循的方法,以一种非常有趣的方式构造他们应用程序。因此他们在日后回顾他们的程序时仍能有效的理解并轻松的调试程序故障。此外还有一些问题,比如当你在谈论CoffeeScript或其他基于此语言的编译结果时,首先面临的是你如何在其中调试,我的意思是你无法完全掌控编译器的生成结果。第二个是当你想在浏览器中设置断点的时候你可能没有设置同步断点之类的工具。

以TypeScript为例,你先前没有特别问到它,但是我比较喜欢动态语言,在动态语言中不必声明类型。如果有大量测试和工具你不用事先声明类型。这实际上就是我们想用Wakanda提供给用户的,编写高质量JavaScript代码的工具。

   

12. […] 能谈一下你做端到端JavaScript应用程序,特别是中等或者相对较大型的代码库的经验吗?人们认识到使用相同的语言贯穿整个项目确实是非常棒的,有的代码或许可以重用,这对你来说意味着什么?

Dio的完整提问: 你刚刚提到EcmaScript 6的规范会参考CoffeeScript的某些特性,这非常有趣。不过有趣的并不只一点,这个规范以前是被Python社区推动的,现在看起来更倾向于向CoffeeScript等社区借鉴。能谈一下你做端到端JavaScript应用程序,特别是中等或者相对较大型的代码库的经验吗?人们认识到使用相同的语言贯穿整个项目确实是非常棒的,有的代码或许可以重用,这对你来说意味着什么?

你提到了许多外界的开发者也已经知道JavaScript而且他们也曾使用JavaScript配合PHP或者.NET等等做过开发工作。所以他们心理上就会比较倾向于使用JavaScript将那些知识应用在服务器端开发,这对他们来说是最顺理成章的。他们不用被迫去学习其他的语言,但是有个问题是如何构架代码库呢?随着应用程序的增大,该如何将这些松散的零部件组合在一起构建该程序?在客户端你使用require JS可能有助于你获取各个部分并加载依赖性。在服务器端你有NPM或者CommonJS模块来将各部分拼接在一起。对于Wakanda,它实际上像我说的数据模型就是你应用程序的核心,所以你应该尽可能得给它添加更多的业务逻辑并使用那个模型来编码。总而言之,它能够帮助你构建大型的应用程序。

   

13. 你们在服务器端使用某种类似CommonJS的机制来加载模块吗?

是的,Wakanda服务器端兼容CommonJS库,我们可以将它们加载进来。

   

14. 对于那些正在考虑采用端对端JavaScript软件栈的团队,你有什么建议吗?有什么常见的陷阱是他们需要需要知道的吗?

这是一个宽泛的问题。我觉得确有许多陷阱,其中一个比如说:“什么是你的编程模型?”当你真正喜欢上异步模型的应用程序开发并使用的非常舒服的时候,你会发现在那有许多解决方案。速度是要考虑的问题,规模是另一个需要考虑的因素。那就是为什么我们说:“你可以使用你现有的编程方式,我们来提供给你服务器端的多线程JavaScript。”所以你不用改变你的编程习惯,你可以使用跟以前一样的模式。

   

15. 我们在浏览器上习惯用异步模型,在服务器端你们使用的是它的奇异模型,它是完全同步的?

在服务器端它是完全同步的,所以你只需要编写线性执行的代码,这样在调试的时候比较方便。当你使用异步模型时,代码会很快变得非常复杂,当然它在速度方面拥有很大的优势,但是我们使用多线程技术克服了同步模型的这个缺点。

   

16. Are you using things like Workers for emulating threads?

没有,在后端Wakanda服务器中我们使用很多线程,但并不是每一个请求都会启动一个线程,但是Workers会启动另外的线程,所以在我们的框架中线程是安全的,而且我们也会使用web workers建立单独进程。

   

17. […]你使用过所有这些开发语言能否帮他们分析一下,比如说你或者你的客户有没有遇到过代码库超出控制或者类似的事情?如果用Google查询“Spaghetti Code”大部分时间你会看到在句子中看到同样的词,如JavaScript。

Dio的完整提问: 似乎有的使用JavaScript的新团队在代码量较大时遇到一些问题,特别是那些从其他编程语言转来开发JavaScript的尤其如此,比如前.NET或者Java开发者。你使用过所有这些开发语言能否帮他们分析一下,比如说你或者你的客户有没有遇到过代码库超出控制或者类似的事情?如果用Google查询“Spaghetti Code”大部分时间你会看到在句子中看到同样的词,如JavaScript。

你是对的,那的确是些陷阱。我的意思是这在某种程度上又回到了之前那个问题的答案。我们实际上一直试图引导开发者使用模型驱动样式。我们常说:“将注意力放在模型上并尽量在模型中添加你的代码,这样才能避免生成意大利面式代码。”但是没法禁止他们仍然将那些导致代码难以维护的东西添加进项目。我们提供了以模型驱动的开发环境而且我们提供了一个测试环境以保证你能开发确保自己的应用程序能正确运行。

   

18. 临近结束,你觉得现今的网络平台缺失的最重要的东西是什么?有没有什么是你在开发一个新项目或者开发Wakanda的框架时经常遇到以至于说:“我真希望我们能用DOM或者JavaScript或着用浏览器工作的方式来处理这些问题,有这样的API吗?

我觉得,作为一个网络应用开发者会遇到的许多问题已经被HTML 5解决了,举个例子,比如本地存储,又比如客户端与服务器端使用Chase通讯之类的事情。这些技术已经存在了。有些时候让我作为开发者仍然感到难以抉择的是应该选择哪个库来开发,哪个才是最合适的。当你在做项目的时候,你非常需要快速定位和修正错误,并专注于解决所遇到的问题,而不会太关心你所用的各种开发包之间的依赖关系。所以那就是我们的切入点,可以这样说:“这就是开发包,使用你最喜欢和最习惯的语言,你就能专注于你手头的问题,并埋头苦干。”所以我觉得就HTML和JavaScript而言现在的所有技术都具备了,不过都交织在一起了,而我们所擅长的就是提供给开发者合适的工具。

Dio:非常感谢你Juergen!

不用客气!

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT