订阅软件研发RSS CSDN首页> 软件研发

【开源专访】郑晔谈Moco框架的前世今生以及Java编程之道

发表于2013-08-23 17:49| 次阅读| 来源CSDN| 0 条评论| 作者王果

摘要:在JavaOne 2013大会上,郑晔凭Moco框架获得“Duke选择奖”。Moco是一个为解决Java企业级开发中存在的集成问题而设计的搭建模拟服务器的工具。CSDN记者采访了郑晔,请他谈谈这一框架以及他关于Java和敏捷开发的经验。

在今年7月份在上海举办的JavaOne 2013大会上,ThoughtWorks首席咨询师郑晔凭借Moco框架获得了首届中国“Duke选择奖”。该奖项已在全球范围连续开展了十届,旨在表彰Java领域内杰出技术项目及个人。

Moco是为解决Java企业级开发中存在的集成问题而设计的一个搭建模拟服务器程序库/工具。Moco本身支持API和独立运行两种方式。通过使用API,开发人员可以在JUnit、JBehave等测试测试框架里使用Moco,极大程度地降低了集成点测试的复杂度。

Moco项目地址:https://github.com/dreamhead/moco

CSDN记者采访了郑晔,请他来详细谈谈Moco框架以及他关于Java编程、敏捷开发的一些经验。


CSDN:请先做个自我介绍吧!

郑晔:大家好,我是郑晔,一个有十多年工作经验的程序员,现在在ThoughtWorks工作。这些年做过很多事情,包括开发和咨询,除此之外,做过演讲,也写过文章,翻译过书,也贡献过开源,愿意与人畅聊技术,也愿意分享自己的经验。个人一直热衷于探索各种程序设计语言在真实软件开发中所能发挥的威力,致力于探寻合理的软件开发方式。我的blog是梦想风暴(http://dreamhead.blogbus.com/),新浪微博是@dreamhead

CSDN:开发Moco框架的初衷是什么?

郑晔:集成,几乎是一个稍具规模的应用都躲不开的话题。集成的难点在于,我们无法掌控集成端,它通常是由第三方团队开发的,在我们开发时不能给我们提供服务,更有甚者,要集成的服务在开发时还不存在。所以,开发团队为了不耽误进度,通常会自己开发一个模拟服务器,模拟集成端。具体到模拟服务上,处理的手法也是各种各样,对于Java团队,因为服务以HTTP集成居多,无论是Web Service,还是REST,所以,一种典型的做法是,开发一个模拟服务,打成WAR包,部署到一个应用服务器上。而我们知道,一旦牵扯到应用服务器部署,就是非常耗时的,部署的时间量级通常是分钟级的。而且,模拟服务器通常不是一次性的工作,我们需要在开发过程中,反复调整,这就进一步增加了维护一个模拟服务器的成本。有的应用服务器是非常消耗资源的,要用专门的机器来部署它。更进一步,如果机器资源有限,团队就只能共享一台机器,这样,即便我为测试自己的部分做一个小的改动,很有可能因为得不到机器的使用权,而要等上几天时间。

Moco就是针对这样一个特定的场景而生的。

CSDNMoco能帮助我们解决开发中的哪些问题?它的原理是什么?技术上是如何实现的?

郑晔:Moco是针对HTTP集成而生的,不过,现在也有人把它用在其它需要一个模拟服务器的场景中。比如,在移动开发中,有人开发一个移动应用,需要有一个远端服务,但在开发时,这个服务还不存在,他就用Moco模拟了一个服务,保证移动应用可以顺利的开发。同样,也有人把它用在Web前端开发里,当我们的页面需要通过与服务器交互时,就可以用Moco模拟这样一个服务。这种做法在开发一个页面原型时,非常有用,因为那个时候,我们还来不及开发一个完整的服务。

Moco的原理其实很简单,它就是根据一些配置,启动一个真正的HTTP服务。当发起请求满足一个条件时,它就给回复一个应答。Moco的底层没有依赖于像Servlet这样的重型框架,而是基于一个叫Netty网络应用框架直接编写的,这样一来,绕过了复杂的应用服务器,所以,它的速度是极快的。

CSDN:您提到Moco的开发灵感来自其他的Mock框架(如Mockito和Playframework),与这些框架相比,Moco的特点和优势是什么?

郑晔:这里的灵感主要指的是,程序的表达性。相对于传统做法,Moco的主要优势在于,配置非常符合程序员的直觉,而且启动速度极快。这是有了这两个最基本的特点,程序员用起来就非常方便。我们可以把Moco用在测试框架里。能够在测试框架里使用,也就意味着当发现什么问题时,我们可以很方便的调试,集成的难度一下子就降低了,把原来分钟级甚至天级的等待变成了立即可做的事情。对程序员来说,集成测试难度的降低也就意味着,缩短开发周期。我们把省下来的时间做更多有意义的事情。

CSDN:我看到Moco已经发布了0.8.1版本,Moco的未来规划是什么?

郑晔:Moco工程里有一个叫plan的文件,里面记录了很多Moco未来要做的事情,其中包含了很多东西,比如,扩展其它程序设计语言的支持、增加更多工具的支持。从Moco本身的功能上来说,也有很多可做的事情,比如,未来可能会实现对Socket的支持等。近期准备实现的功能是,异步调用其它服务,这是为了实现诸如OAuth认证之类的模型所要支持的。

CSDN:恭喜Moco获得了“Duke选择奖”,您认为Moco能够获奖的最大原因是什么?它的创新点在于?

郑晔:站在我的角度来看,Duke选择奖是鼓励创新的,而Moco是创新性地解决了集成这个非常复杂的问题。Moco以一种四两拨千斤的方式解决了原来需要大动干戈的集成问题。另外,Moco的Java API是一种内部DSL,它也是对Java程序设计语言表达能力的一种探索,某种程度上,也算是一种创新吧!

CSDN:为什么选择将Moco开源?

郑晔:从涉猎程序设计以来,我一直对开源充满好感。把自己的代码贡献出来,与其他人做知识上的交流,帮助别人解决问题,对于知识工作者来说,这是一件很有成就感的事情。加入ThoughtWorks以后,我们内部对于开源是尤为鼓励的,那些与业务逻辑无关,可以解决通用性问题的项目,我们都会尝试着开源出来。所以,你会看到许多来自ThoughtWorks的开源项目,有一些项目甚至给业界带来了非常大的改变,像大家熟知的CruiseControl,它开创持续集成的先河,Selenium解决Web页面的可测试性问题。有了这样的土壤,开始动手写Moco时,我自然而然地就想到了以开源的方式进行。

CSDN:除了Moco,您还发起或参与过哪些开源项目?从事开源这么长时间,您最大的感悟是什么?

郑晔:除了Moco,我还参与过一些开源项目,比如大约6、7年前,我曾经是第一个Ruby编译器项目XRuby的主力开发者,也曾经为JRuby贡献过一些代码。在我的github上,还有一些用Ruby读写二进制文件的程序库、用Ruby处理Java字节码的程序、用Java的Annotation实现委托的程序库,等等之类的小项目。只是适用范围有限,所以,没有很大的影响力。

其实,从开源里,我更多的是学习,贡献的内容相对来说还是很少的。其实,大多数人都是这样的。在程序设计领域,最有发言权的就是代码,任何一个希望提高自己能力的人都能从开源项目上学习到许多东西,无论是手法,还是理念。在我职业生涯之初,我接触到Spring,当时版本还是0.8,从中学到很多东西,让我受益至今。所以,我个人也特别希望以自己的能力能够回馈开源社区,希望别人也能从我的代码中有所感悟。获取与奉献,相辅相成,才能让社区更蓬勃的发展,让个体从中受益。

接下来,郑晔为我们分享了他关于Java编程、敏捷开发的一些经验,请看第2页

0
0
  • CSDN官方微信
  • 扫描二维码,向CSDN吐槽
  • 微信号:CSDNnews
程序员移动端订阅下载

微博关注

相关热门文章