郑晔谈Moco诞生的整个过程
提到Moco的诞生,最开始的目的就是解决公司遇到的困难。从2002年开始做软件开发工作起,就遇到企业集成的问题。自己编写了很多的代码,解决模拟服务的问题。到后来发现在每一个项目里都会用到这些东西。直到2012年,由于翻译Martin Fowler这本《领域特定语言》那本书,想找一个途径,锻炼自己设计DSL的能力。大概10月份我加入到一个新的项目里,那个项目里面刚好有一些类似的需求,就开始尝试解决这样的一个问题。大概写了两个多月,到12月份的时候,Moco最开始的雏形已经出来。
目前,Moco还是一个非常年轻的项目,8月1号刚刚发布了Moco最新的版本,0.8.1,许多人也是才开始认识到Moco这个框架。
郑晔表示:Moco是一个开源项目,与许多开源项目一样,它并不是利用工作时间来做的,而更多的是利用自己的业余时间完成的。Moco绝大部分代码是早上5点多到六点半写的,每天给Moco写一些新的特性,提交一些代码,都是利用业余的时间。只要有可能,自己会继续做下去,在一个文件里面,已经列出了很多Moco未来要做的事情。
虽然公司鼓励开源项目,但是在工作的时间都是为客户的项目服务。我需要的就是写代码,之前没有做Moco时业余时间大多数都是被写代码、写博客,或者是自己写一些东西占据掉,只不过现在把时间放到了Moco上,没有特别的,都是占据了很多的业余时间。
Moco是一个开源项目,除了自己贡献了绝大部分代码之外,也有其他人为Moco贡献了很多的代码。比如帮Moco修一些bug,或者是帮Moco提一些新的特性。
如何实现Moco技术架构?
郑晔:那段时间我是在翻译一本书叫《领域特定语言》,同时脑子里也在思考另外一件事----Java函数是编程,把Java面向对象层的设计和函数式编程理念相结合起来。在这个思考的过程带来了很多新的关于软件开发不同的思路。在构建Moco的时候,把学到的关于函数之间组合的方式,用到了Moco的设计里面。如果看Moco的API代码你会发现它跟传统的Java API设计不太一样,它需要更强的表达性。
当有一个请求或者是说设计一些东西,函数之间的配置组合变得更容易。比如说当请求来的时候,我要根据URL可以去配置一些内容,根据它请求过来的内容去配置一些内容。比如我又有URL又有内容又该怎么办?在Moco的框架里面,通过进入函数式编程的理念,把组合的选择权交给用户。用户就可以根据自己的需要,自己去配置这些东西。Moco整个的配置非常的灵活,不需要为了有URL,又有内容这些东西设计很多的API,让那么代码量非常的庞大。
Moco第一个版本的真正的核心代码只有两千多行,引入这种新的编程的理念,把代码量大幅的缩减。因为java是很好的类型系统,如果随便往里加东西,可能代码就没法通过。只要有这些东西写好了,配置好了,就完全没有任何的问题。