工业脱胎于手工业。
在手工业时代,我们生产一个产品,比如刺绣,是用绣花针一针一针的缝出来的,可以按照手工业者的想法,绣出各种各样的创意作品,相当灵活,只要时间、精力、财力允许,可以做出满足所有客户的所有要求的产品。但是,其效率不言而喻是最低的。
在生产过程中,优秀的手工业者也发明了各种针法,以达到不同的效果,比如什么盘针、套针、抢针、变体绣等等。这些都是这些手工业者为了达到某种效果而总结的技术手段,逐步演变成固定的套路,要达到什么效果,就用什么针法。(这点是不是和设计模式很像?)
随着科学技术的进步,机械设备被大量引入到生产领域。这些冷冰冰的家伙能不知疲倦地工作,而且做的东西误差很小,能达到大批量生产同一款式商品的要求,在刺绣领域也一样,1828年,Joshua Heilman 生产了第一台手摇绣花机,1867年出现第一台飞梭绣花机,以及到后来出现的电脑刺绣技术,使得刺绣能被工业化生产。
发明机械的过程,其实就是一个让机械模仿人行为的过程,这里面就有两个问题比较重要:1、总结人的行为;2、如何让机械模仿。
如果能解决了这两个问题,就能基本实现工业化。
在软件开发领域也同理。
在纯手工编码的方式下,软件开发的过程可以划分为两种行为:1)、如何解决问题, 2)、按照设计编写代码。
第一个部分需要人脑的创造性活动,在人工智能还没有发展到一定阶段之前,这一部分不太可能离开人工的编写;
第二个部分就可以偷懒了。既然第一个部分中,设计者已经想好了如何解决,甚至编写了实现算法,那么,这一步好像只剩下体力活了。而让计算机去做这些体力活肯定能比人做的更有效率。
如果每个问题都是不同的,解决问题的方式也都是完全不同的,那么上述两个阶段的划分好像也没什么太大的价值,反正每个问题都要设计,每个设计都要重新编写实现。
但是在更多的场合中,上述两个阶段的划分是很有意义的。在一些领域,比如ORM,只要你编写了一个DAO,那么其他的DAO和先前的这个基本上都是一样的,打开两个DAO的代码,你会发现好像两个类只有名称是不同的。在这种情况下,如果你不用一些工具,完全手工编写代码,你会发现:在比较有技术含量的阶段1中,你只花了2个小时,但是完成没有技术含量的阶段2中,你却不得不花上20个小时。
作为一个有智商、有品味、有追求的懒人,我们当然不能接受这么无聊的工作。我们要让计算机来帮我们完成。怎么完成呢?
我们不妨先考虑一下写文档,文档有很多种,简历、推荐信、证明、会议记录、需求规格说明书、概要设计、详细设计等等等等,不同类型的文档内容不同,但是相同类型的文档,其格式基本相同。因此,几乎所有的Office软件都会提供一个“模板”功能,你可以选择一个对应的模板,根据这个模板创建你对应的文件,然后把你的内容填写进去即可。
与开发很相似吧,那为什么我们不借鉴这个工作的很好的“模板”的概念呢?
其实,模板的思想在编程中有很多应用,比如类继承,父类或者接口就可以看作是子类的一个模板,还有一个很有用的设计模式“模板方法”也能让很多框架易于扩展。
回到我们懒人的问题中,要让只认识0、1的计算机帮我们编写代码,我们就要编写一个模板,让它遵照执行。然后在运行时,给这个模板中填充一些不同的变量就可以了。
这就是Liferay ServiceBuilder的方式,也是我认为可以实现软件工业化生产的基础。