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

【开源专访】郑晔谈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页。

仙剑之父姚壮宪强势加盟Unity游戏及应用大赛 智能可视化平台:DCOS之数据中心抽象 一周热点:5美分/GB的开源存储系统,及硬盘质量“最差”的希捷 英特尔收购可穿戴技术公司BASIS Science 设计移动App的十大技巧 皮皮网陈超:易用与性能兼备,Spark蓬勃发展! Sahara顺利毕业,将加速OpenStack与Hadoop的融合 十大将拯救地球的开源硬件项目 Android应用程序开发者需要了解的五个内容 百度轻应用插件CloudaMySQL诞生记 盘点Github所用的开源项目 开源不只是面对开发者 见证新一代全能大数据计算平台崛起 ——中国Spark技术峰会将于4月19日在北京召开 大佬放猛料的节奏 阿里云聚无线为开发者提供一站式服务 智能硬件又添新选手 汉王推出便携PM2.5检测仪 2014年首场百度轻应用高级训练营落幕 现场展示云端结合能力 销售易史彦泽:企业应用,自上而下的革命 专访寻医问药网创始人:轻应用背后的长尾效应 轻松打造品牌轻应用:实时Web App开发框架Clouda Intel强势入驻,Cloudera新一轮融资总额已达9亿美元 每个Web开发者必备的9个软技能 4月1日:闻名世界的苹果公司正式成立 AMD正在探索一种新颖的Linux开源驱动模式 QQ手机浏览器推出5.1播霸版 内置强解码引擎支持22种视频格式 Ceph浅析(上):概况与设计思想 IBM:你好,互联网 光网络SDN化的四大驱动力及两条路径 《近匠》酷传:解除App发布和监控痛苦 有道heX正式开源:用HTML5和NodeJS开发桌面应用 在3D空间创作:英大学生发明增强现实设计产品 2014年3月浏览器份额:Chrome终超Firefox 成市场第二大浏览器 各linux都什么优点 这段代吗怎么写? 分乃身外之物,顺便问一个问题。 在delphi中怎么样把字符串的前后空格去掉 有没有人用vss做版本控制的?? 摩托遇到怪事~~决定研究一下~~有兴趣看看拉~~ 求救:哪位有NotesSQL 2.06 email:frank@southsundin.com API ATCS10_SCO505版本,免费的类似TUXEDO消息中间件,欢迎大家使用!!! what is the MAPI? 一个关于子窗体的问题?请大家帮忙,在线等待! 如何做浮动窗体! 一个不是很难的问题。我却很难哟 请教关于访问Jbuilder7中数据库的问题(急) 突然想到的一个问题,请问大家在认真思考问题的时候都习惯做些什么动作? 在SDI程序中,如何在“框架类”中得到“文档类”的指针? 经常看到图片的上传到数据库,以及如何显示的问题,并且在另一个页面实现指定位置显示多个图片!我整理了,需要来登记! 招聘程序员!!!! 各位老大:请帮助!!!!! 请假两天要扣掉薪水的百分之几? JSP通过JDBC连接ORACLE的问题!!! 简单问题,vb得块注视是什么? 为什么mingw和DJGPP. 的主页总是上不去?? 五笔怎么装?装在什么目录下? 最远的距离 请教关于访问Jbuilder7中数据库的问题(急) JSP通过JDBC连接ORACLE的问题!!!!!!!!!!!!!!! 打印机状态,在线等待,万分火急 modelmaker6这东西是做什么的,那位前辈知道 NOTES在用久了之后,邮箱会变的巨大,几百MB,但即使我将邮件删除,其邮件文件还是那么大,怎么可以让它缩小? 我为程序中的职工设了一个序号,人数有多少序号就有多少。可以一眼就看出有多少人。可是当我在离职表中删除职工时。序号跟着被删除。删除 关于sql的难题。 请问如何用SQL语句更改一个表的字段长度,其他都不变. jsp读取oracle8.1.6数据表中的中文,读出为?,着急啊。 上个100帖子已结,现在再拿100分求从导入到数据库的代码,各位老大帮忙看看。 怎样用程序设置文件夹共享? VB中,怎样实现C中的continue? 注册表与记录登录密码 更新表中某字段的值 请问如何实现像delphi编辑器那样,当输入了关键字后会变成粗体或其它的颜色? 有人需要Delphi调用水晶报表的例子吗? 关于ADO+SQL Server2000数据库备份的问题! vb.net应用程序! SQL语句问题 有关位图的问题? 如何从扫描仪中读图,欢迎讨论 这个问题难者不会,会者不难! 如何把自制的ActiveX打包成*.cab包放在网页上 ? 关于DeleteTable方法 备份数据库时出现42000错误:"d:\backup\20021115.mdfIO"发生不要恢复错误,backup被中止,救命啊,谢谢!!! An very easy problem! 2011六级求估分八个短对话对5个,两个长对话对七个空对5个,短文十个空对7个,复合式听写单词8对6,句子全错.快速阅读十对6,填空五对3,深度阅读十对4,翻译五对3.完型二十对11作文偏上!四易估分 “乱”字右边的部首怎么打出来啊?3Q 西班牙语和葡萄牙语区别差多少? 如图所示,电源电压U保持不变,滑动变阻器的最大阻值是10Ω,开关S闭合,当滑动变阻器的滑片P在a端时,电流表的示数是0.5A.当滑动变阻器的滑片P在b端时,电流表的示数是2.5A,小灯泡正常发光.则电 高二的(概率、几何概型)····某公共汽车站,每隔15分钟有一辆车出发,并发出前在车站停靠3分钟(1)求乘客到站候车时间大于10分钟的概率(2)求候车时间不超过10分钟的概率(3)求乘 英语翻译1.请问邓亚萍是中国人吗?_______ ________,________Deng yaping________China?2.刘翔是来自哪个国家呢?_______ ________Liu Xiang________? 标有''10v,4w''的L1与标有''15v,10w''的L2串联接入电路中,只让其中一个正常发光,而另一个发光较暗,就迎接再多大的电压上? 如何在excel表格中有一列都填写相同数据 等可能事件的概率 从52张扑克牌中任取5张,求下列事件的概率;从52张扑克牌中任取5张,求下列事件的概率; (1)以K打头的同花顺次5张牌; (2)同花顺次5张牌 (3)三张同点数且另两张取其他同 数字543 486, 如何在excel中,填写一个条件后,在其他表格中自动出来相应的数据值. 左边一个“虫”字旁,右边一个“八”怎么读?左边一个“虫”字旁,右边一个“夏”怎么读?拜托各位了 3Q 世博会徽章的英语怎么说 计算电功率一个灯泡单独串联在电压为U的电路中,正常发光,电功率为100W;将它与另一块电阻R共同串联在原电路中,电阻R功率为9W.假设电阻大小不随温度变化而变化且电压稳定.问:与另一块 用所给代词的形容词性物主代词或名词性物主代词填空.1.Do you like ___(you) Chinese teacher? 2.They are doing __(they) homework. 3.I love ___(we) Chinese teacher very much. 4.I have a cat.___(it) name is Mimi. 5.It isn't ___(h “勋章” 英语怎么说 防护林林木被采伐,林地未被占用,能不能认定属占用林地 <<高中英语语法填空专项训练>>(上海交通大学出版社) 的54题答案是什么? 我们互相交换徽章可以吗?用英语怎么说啊?要礼貌点的! 怎样办理申请林地 砍伐? 和采集有关的歇后语还有名言 听为什么是口字旁拜托各位了 3Q听是用耳,为何却用口字旁 Where are the students in Class One come from?错在哪里 搜一个字的读音拜托各位了 3Q请问左右两个山字合起来怎么读,请求认识这个字的人帮帮我. 600字美文摘抄,带摘抄理由!3Q!多给几个, 我们不能说这是绝对的 怎么用英文翻译 谢谢 《高中英语语法填空专项训练》(上海交通大学出版社)能力篇test2的35题答案是 为什么大量砍伐森林会出现洪水, EXCEL中A列是数字其中有重复的,B列是从小到大排列1,2,3,4,5,6.要求C列中显示B列中数字在A列中出现的次数 韬去掉一个韦是什么字拜托各位了 3Q 大雨不会冲走土壤,而会引起严重的水灾.翻译英语. 跪求八年级上语文全部通假字在线等啊!!! 有一个字,左边是一个“女”字,右边是一个“吉”字,怎么读?3Q 印刷纸的种类和这么去区分 一根劲度为400N/m的轻质弹簧,原长12cm,当受到一个大小为16N的压力作用时,该弹簧将缩短到多少厘米?算出来了吗 8上人教版语文第5单元 古今异义和通假字归纳《与朱元思书》《无柳先生传》《马说》《送东阳马生序》《诗词曲五首》 彩印厂用到钛白粉吗? 一个口加一个夏是什么字?3Q 都有哪些?要全部的,只在第五单元 英语翻译这里有通假字,请大家帮我找出来 今老矣,无能为也已.夫晋,何厌之有将免者以告,公令医守之当室者死,三年释其政国之孺子之游者,无不铺今夫差衣水犀之甲者亿有三千明日,徐公来, 一个口在加一个真是什么字啊 两道英语选词填空题with the intention of ,in general ,focus one's efforts on ,show no respect for ,benefit from ,interfere with ,concentrate on ,succeed in ,be related to ,comment on1,As students we should _____study.2,According to the news r 英语翻译济人之贾人————————立而观之.那个 一个走之底加一个你字怎么打拜托各位了 3Q如题 我想问打印机的油墨沾在衣服上了,洗不掉了,有谁知道,我真的很想知道我的衣服都弄脏了好几件了,可就是不知道怎么处理,谢谢知道的朋友们,可以告诉怎么洗干净, 文艺复兴运动给我们的历史启示是什么?美国独立战争给我们什么启示? 求:需要用单位求解的高中物理题 衣服上粘了印刷用的油墨怎样洗掉呢 求一首拉丁风格舞曲的名字,歌词有don't go i know you wanna touch me ,是个女生唱的副歌 是什么stay ei ei ei 的 用英语翻译“现在的砍伐森林很严重,我们应该禁止乱砍伐树木” 青蛙晚上为什么会鸣叫? 生产钛白粉的原材料是什么我知道钛白粉就是二氧化钛,只是想知道生产二氧化钛的原材料是什么?以及二氧化钛在原料中所占的成分 日本字怎么打?3Q 英文选词填空题先到先得 2011六级估分~听力选择对20个 听词对4个 句子就不算了快速阅读对8个 短文问答对3个 仔细阅读对5个完型对10个 翻译对1 作文算6分百分制大概56分 这样能过吗? 下面几个字怎么打拜托各位了 3Q帮我说下,用什么打出来,按几多下+ Where did your aunt come from?(保持原句意思)如题·· 改的句子是________ ________ your aunt _________?w我没有分·· 大哥大姐帮一下啊 2011 六级估分快速阅读8个,听力18个,填词4个,句子基本写了,仔细阅读填的3个,选择7个,完形填空12个,翻译一般,作文一般, 日本的‘之’字怎么打?拜托各位了 3Q where do the students in your chool comre from?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘