说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
在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页。

初创公司Parse.ly:1年内捕获1.6亿独立访问用户,收入增5倍 融资新方式:用未来10年收入的6%融资10万美元 小米手机-HAXLR8on:创客32小时全纪实 图文:看苹果下一代iPhone细节 能吸引你购买吗? [开源推荐]Intention.js:通过HTML进行响应式开发 Android副总裁Hugo Barra将加盟小米 三星将召开首届开发者大会 推新SDK和S Pen 15个步骤创立技术公司,并收获千万用户(三) H3Cloud:为企业提供最优化IaaS方案 VMware、红帽对决云管理平台 大数据辅助决策,构建智慧城市 所见即所得:四款免编程移动游戏开发引擎推荐 PaaS乱局:Container的新机遇 IDC再度下调2013年全球PC销量预期 平板电脑中枪 Waze联合创始人做FeeX 用众包方式增加银行服务透明度 Ripple CTO Stefan Thomas:Bitcoin与未来支付应用开发 第二届Coding For Fun编程马拉松实时快报→→ 数字化你的脸:14个智能眼镜开发平台 Unite2013开发者大会:Unity新增多项重磅革新 微软大中华区副总裁谢恩伟:微软云+端应用模型前瞻 移动周报:从硬件马拉松到Barra加盟,本周小米很火 小而美的Diffbot:将Web页面转化为数据库,获多位科技大佬注资 “叙利亚电子军”对美国多家网站发起“电子制裁” 麻省理工TR35之IT界年轻有为创新者(上) Linux用户须知的16款实用软件 新平台,新惊喜:记第二届Coding For Fun 创业建议泛滥成灾 实用的不多 腾讯云俱乐部北京站:知名手游商畅谈云时代开发运营策略 LG再战平板市场:将推出8.3英寸平板G Pad 编程语言与工具专题论坛:各类编程语言使用体会分享 淘宝、腾讯、豆瓣、支付宝、网易专家热议大数据分析与BI实战 java与C的问题,怎么办? VC里如何调用std里的operator new和operator delete 有沒辦法使成員函數只供指定的 class 呼叫! 关于DELPHI中的DBGRID控件 关于enhydra4.0+kelp4.0+jbuilder4.0。 能不能用Mscomm控制并口,如果行,应该怎样将一串ASCII值发送到并口;如果不行,能用其它方式吗?(最好能提供例程)多谢了。 求救,请教ado中有关事务的问题。 异想天开的问题???,进来就给分!!!! 请教高手,我如何将*.swf文件从网下摘下? 集线器与交换机怎样级联? 请问如何用RasDial 类似冰河“搜索主机”的功能怎么实现啊? 如何利用socket截获80端口数据?请给出源代码。 水晶报表的问题 Help的窗口 送分:关于数据库中的数据在前台显示的问题,敬请高手指教 请问一下各位PB FANS,PB中的自定义事件中的extenal选项有何作用? Label的小问题,以后给分,现在确实没分了。 测试a 有沒辦法使成員函數只供指定的 class 呼叫! 请问如何给listview添加鼠标拖拽功能,如从本视图中拖走一行? Jbuild and Visual Age for Java 只使用数据库表单如何不带环境? 为什么在Cmd.exe 下可以运行,但是在ASP里面却没有办法写进数据???斑竹怎么只提供4页的讨论内容呢?? 救急,启动winNT时候inetinfo.exe总是共享冲突,该咋解决? 如何防止内存泄漏 帮忙看诊断一下遇到的问题。 Fatal error C1010: unexpected end of file while looking for precompiled header directive是什么意思?怎么改正? 关于数据窗口 D3D8的疑問 作动态连接库链接时出错? rLabel的小问题,以后给分. WebSphere 4.0中是否已经直接实现了connection pool CSDN的bug报告:您不能给自己加分...... ORACLE里的中文字符集怎么解决?高分求救!!! 身为一个程序员,谈谈这些年里你所拥有的成功经历!见识一下CSDN牛人总汇! 这是怎么回事呀? asp怎么调用存储过程,主要是参数问题怎么传递 高分,给高分!!! 如何在useradd,增加一个用户的同时,限定这个用户的使用空间 关于内存分配的问题 由金山英文写作助理想到一种木马机制 如何修改Delta数据包中的信息 请问各位哥哥,配置个wu-ftp服务器,一个大目录有一个用户访问,里面的小目录由其它用户访问,怎么配置? 文凭真的这么重要么! 提问关于并发服务器。 关于jbuilder5开发EJB运行容器时的问题,跟帖都有分 请问怎样加一个位图作为Dialog的背景? 写dll链接时出错? 有谁知道windows屏幕保护的通用密码? 请教光标定位 油遇到水为什么会起火? 为什么d区元素水合离子具有颜色 下列说法正确的是A.酸的水溶液中一定有氢离子B.碱中一定含有金属元素C.含有氧元素的物质一定是氧化物D.非金属氧化物一定是酸性氧化物(我认为是C,但答案是AB,希望各位帅哥美女帮个忙..要 油遇到水为什么会炸起来啊? 钾离子在溶液中有没有颜色,为什么?是什么颜色呀?我看烟花里都有钾元素,就证明钾有颜色, 这个是题目:CL2通入石灰乳得漂粉精,其主要成分CA(OH)2.3CACL(OCL).nH20(2个.应该是在当中的- -.).现有一种漂白粉的“有效氯”(过量HCL和漂白粉作用生成CL2的量和漂白粉质量之比)为35%,若该漂白 为什么油遇到水后会溅起来 铬元素在酸碱各种不同条件下离子的颜色 向100mLNaOH溶液中通入4.4gCO2,完全反应后,将溶液低温缓慢蒸干,得到不含结晶水的固体9.5g,求100mLNaOH溶液中NaOH的质量6g怎么算的? 水碰到油为什么会沾起来 能否从微观角度分析一些副族元素离子的颜色比如,在水中他们就能显色,无水状态有的就不行 这个“水爆炸反应”是怎么实现的?视频中的“水爆炸反应”是怎么实现的?http://v.youku.com/v_show/id_cb00XMjY2MjUzMjA=.html这个是物理反应还是化学反应?我也知道是物理的,那它是什么和什么的反应啊 溶液的颜色是由什么离子决定的?怎么判断?每个离子都有颜色吗?原子也是吗? 把---gNaOH 固体溶解在90gH2O中,才能使每10个水分子中含有1个钠离子 这时所得溶液中NaOH质量分数为----- 三价铁离子都与那些物质发生显色反应?我想要一个系统一点的.完整点的。 无锡哪里能买到化学实验仪器和药品?想在家做实验, 跳跳糖的成分成分 好的20! 什么是显色反应?为什么测定金属离子需要进行显色? 我在沈阳,问一下在哪里能买到化学实验仪器?还有,药品在那里买呀? 跳跳糖遇水会发生什么反应?为什么会发生反应?如题. 有哪些常见的有色离子 分别显什么色还需讲明化学价 北京哪能买到化学实验仪器及试剂?十分感谢你们帮我了个大忙,尤其是岑r 和werewolf1989,werewolf1989:十分愿意和你交个朋友 跳跳糖到底包含什么成分?为什么会跳呢? 跪求“负电性” 与金属离子,尤其是与显色金属离子有很强亲和力的“大分子基团”如果我的限制条件影响了您的发挥,请您只列举下大分子基团——负电性.感激不尽!一般有机溶液,常添加 北京哪里有卖化学实验仪器的希望有详细地址,而且最好能告诉我行车路线,如果能够告诉价格和仪器的名称, 跳跳糖为什么会在嘴里面爆炸?就是小时候吃过的那种跳跳糖放到嘴里面就会炸开.吃起来很好玩.可是,为什么呢? 某物质A在一定条件下加热分解,产物都是气体,分解方程式是2A=B+2C+2D.测得生成的混合气体对氢气的相对密度为d,则A的相对分子质量为?7d 5d 2.5d 2d 为什么锂碰到水会爆炸 爆炸糖是跳跳糖吗 铯与水反应现象 氯化钠和氯化银的阳离子都是+1价离子,为什么氯化钠易溶于水而氯化银不易溶于水? 锂离子电池里面不会产生锂单质吧?锂离子遇水不爆炸吧? 等离子是什么原理发光和产生彩色图像的? 二氧化硫和水的反应方程式是什么? 银离子遇碱颜色变化为什么会是白色变灰黑色? 求各种离子在溶液所呈现的颜色除Cu,Fe,Mn,Zn离子 根据阳离子不同盐可以分为_____、______、______等;根据银离子不同,盐可分为_____、______、_______等. 根据离子的颜色判断固体的颜色,为什么有时不准?(如氧化铜)是不是成了固体后,离子的颜色发生了改变? 1公斤铯和水有多大反应啊 怎么买化学实验仪器?想在家做实验,要零售的,常用的化学实验仪器和药品淘宝上的也行,不过要一整套的,分别买要分别付邮费的,太贵了,我是山东枣庄的 使溶液发生颜色变化的离子能共存么?例如:Cu2+与SO42-能共存么 铯的氧化物与水反应生成什么 深圳哪里有化学实验仪器购买 亚铁离子中滴高锰酸钾恰好反应颜色的变化 铯与水剧烈反应放出什么颜色的气体 化学试验仪器有哪些不能直接加热的仪器?至少7个有哪些能直接加热的仪器?至少4个有哪些能间接加热的仪器?至少3个 水遇上高温的油为毛爆炸 将甲乙丙丁四种金属分别放入到稀盐酸中,甲乙丙丁反应后有气体放出,丙没有气体放出,再把丁分别投入甲乙的将甲乙丙丁四种金属分别放入到稀盐酸中,甲乙丙丁反应后有气体放出,丙没有气 催化剂+二氧化硫=硫酸?三氧化硫+水=硫酸?两种都可以?这两种都可以制造 硫酸 那空气怎么制造 水在高温下分解会爆炸吗?水在容积一定的密闭容器内高温(2000度以上)分解后(温度不变)会导致爆炸吗? 锂,钠,钾.铷,铯,钫为什么能与水反应 (1)多少克水与49g硫酸所含的氢元素的质量相同?(2)要使二氧化硫和三氧化硫含有相同质量的氧...(1)多少克水与49g硫酸所含的氢元素的质量相同?(2)要使二氧化硫和三氧化硫含有相同质量的氧元 0.1MOL某烃在标准状况下与20L O2(过量)完全反应,将生成的混合气体通过足量的Na2O2粉末,使之完全反应,此时Na2O2的质量增加15G,经过处理后的气体为14.4L,是通过计算求该烃的分子式. 碱金属锂:(Li)、钠(Na)、钾(K)、铷(Rb)、铯(Cs)、钫(Fr)遇到水会融化吗 高中所有的化学实验仪器 及作用所有的化学仪器如(量筒)及设备如(酒精灯) 的作用 要全面的谢谢 还有 经典的化学实验题 水里面放什么会爆炸?我在[探索发现]节目里面看到过往水里添加一种物质会使其爆炸? 根据金属钠,钾与水的反应现象,推断锂,钠,钾,铷,铯各一克分别与足量的水反应,其中反应最剧烈的金属------------,相同条件下,放出氢气的体积最大的是------------希望填空清晰,赶紧回答! 北京哪能买到物理和化学实验仪器及药剂 过度元素离子结构和颜色的发生有什么关系越具体越好~~~~~~~~ 钠 钾 铷 铯 到底是什么化学物质啊回答仔细一点 容易理解的话我给你加分
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn