前言
自己动手写框架?第一次接触这本书的读者可能会有一些惊讶。是的,这就是写本书的缘由。
1.1 缘由
从毕业以来,我一直从事软件开发及软件管理,做过大量的项目与产品,但是还是喜欢平台软件及软件管理方面的工作。多年的业务开发及平台构建的过程中,踩了许许多多的坑,也积累了许许多多的经验。
和很多的朋友一样,在没有开发框架之前,可能我们只有一些落在纸面上的编码规范,或者说是开发约定。但不管怎么说,这些规范和约定对于我们软件开发过程还是有相当的指导与规范作用的。再后来,随着时间的推移,我们的软件代码写得越来越多,它们中的一部分具有相当的通用性,可能就会变成一个公共库;它们其中的一部分,在整体的运行机制来说是统一的,可以抽取成公共的部分,但是有一部分又会业务性非常强,需要在实际做业务的时候进行扩展。
于是,这部分就会演变成框架!不过,这个过程往往是困难重重。
我们也深知这个道理,依靠一个全新框架做所有的事情,可谓筚路蓝缕。第一是从时间精力上不可能的;第二是没有足够的能力与水平做所有的事情;第三,普适性与专业性方面也不能做到良好的平衡;第四,技术的发展变化是那么快,不能快速适应变化,就只能被淘汰。因此,从框架设计初始,首先应该是从体系化方面考虑,构建一个生态圈,由所有志同道合的程序员来来共同加入生态圈,最终做到越用越强,越用越好用的效果!同时,框架的学习成本必须非常低,这样才可以让使用者更容易上手,避免由于学习难度大而导致的学习曲线太陡、太长。
我们也知道,构建一个框架,明显不仅仅是掌握某种语言的编程技术所能完成的:这需要充分考虑架构、开发、测试、打包、发布、部署、维护等各个环节的各个参与者的需求及期望;这需要对现有各种框架的优点、缺点有充分的了解,需要对自己框架的理念、原则、目标、策略有清晰的定位与认识;这需要有敏锐的嗅觉,可以感受得到某些坏味道,而这种嗅觉就需要经年的积累。所以,好的框架应该是“品”出来的!
正是基于这样的愿景,我们已经走过了近5个年头,实际上在真正开始之前已经做了诸多的准备工作,更多的是在整个软件架构中蕴含了构建者多年软件从业所积累的丰富经验,以及通过踩下的无数的坑所积累起来的经验。开始的是一个人的坚守,现在已经形成了一个紧密团结且互补性强的团队,团队成员每个人都有自己的特色,但是都有一个共同的特点,那就是:对软件事业的热爱。
因此,这本书就是帮助你,一步一步实现一个基于J2EE技术的应用开发框架!
1.2 认识框架
通过这本书,我们将搭建一个基于J2EE技术的应用开发框架,可以用来开发各种Java Application和Web Application。就像一个襁褓中的新生婴儿,我们也给框架取了一个名字——Tiny。权且当作一个小名吧。
1.Tiny名称的来历
取名Tiny是取其微不足道,微小之意。我们认为,一个J2EE开发框架是非常复杂的,只有把框架分解成非常细小、可控的部分,并且对每个细小、可控的部分都有一个最优解或相对最优解,那么整个方案也就可以非常不错的落地。
Tiny Framework是作者在多年框架构建经验积累上的呕心沥血之作,是作者在软件实践中吃了无数的苦,受了无数的累之后,立足于解决软件的开发、测试、发布、实施全生命周期存在的多种“疑难杂症”所开发的软件开发平台。往小了说,可以用于编写一个HelloWorld,再大些可用于快速搭建一个网站,往大了说,可以用于构建一个7*24小时永不停止服务的互联网应用。构建者对软件框架的一个重要理解就是Think big, start small, scale fast。所以,Tiny框架没有什么是不可以进行扩展的,也没有什么是不可以被替换的。所以,只要你是J2EE领域的参与者,Tiny框架都值得你一看、一试、一用。
2. Tiny框架的构建策略
Think big, start small, scale fast。想法要宏伟,但是要从小的开始,同时可以快速的进行扩展。Tiny框架的构建者认为:如果想法不够宏伟,那么就会局限于细节;如果一开始就铺非常大的摊子,将会失去控制;如果不能快速扩展,就无法满足应用需要。
3. Tiny框架的应用定位
基于WEB的展现平台主要包括展现层及控制层,可以让开发人员方便快速的实现Web层的开发,同时要避免现有方案的缺点,同时要有自己非常突出的优点。基于SOA的服务开发平台可以方便的开发平台无关的服务,同时有水平扩展,应用集群方面要有良好的支持,可以满足7*24的运维要求。
4. Tiny框架的目标定位
Tiny框架的构建者认为再好的框架也有过时的时候,再优秀的架构师也有视野盲区,再牛的写手也无法实现所有的部分。所以Tiny框架的构建者认为:只有建立一个良好的生态圈,让广大开发者使用者都在生态圈在找到自己的位置,才是有生命的模式。
5. 兼容性测试
理论上说支持各种支持JDK1.6以上的32位,64位操作系统,但是限于时间及环境准备,实际测试过程当中没有全部测试过。
6. 引用的开源框架和开源协议
框架引用的开源框架有:VelocityVelocity官方网站,Lucene,MavenMaven;扩展引用的开源框架有:JQueryJQuery,HibernateHibernate,iBatisiBatis。
Tiny框架有两个部分的内容,一部分采用开源方式发布,开源发布的部分采用GPLv3开源协议,详细参见英文文本,也可以参看GNU通用公共许可协议获取中文的一些解释;另一部分没有开源,采用商业授权方式进行发布。Tiny框框架之所以选择了GPL协议,主要出发点是说:如果你喜欢Tiny框架,那么可以通过Fork的方式贡献自己的代码,也可以加入Tiny组织一起来构建Tiny框架;也在自己的项目或产品中可以免费使用Tiny框架。但是不允许把Tiny框架整体或其中的一部分作为自己的闭源框架进行发布。这也就意味着,如果你要扩展Tiny框架或者修改Tiny框架为自己的框架,则你自己框架也是需要开源并提供源代码的。
7. 编码规范
Tiny的编码规范,如下:采用Eclipse的Ctrl+Shift+F,格式化出来的格式,即基本的缩进格式所有类名都采首字母大写的驼峰规则所有方法名,变量名都采用首字母小写的驼峰规则所有常量名都定义为用“_”连接的全大写单词方法的圈复杂度3个以下为标准值,5-7个为可接受值,8个以上要加备注说明其必要性除了极少数情况外(数据下标,集合或数组长度等),所有的常量都应该定义为常量除非缩写是业界标准说法,否则所有变量名及常量名,都用全单词拼写类名全部用名字为主体,前面可以加形容性或限定词方法名全部用形容性或动词为主体方法行数,一般在20行以内,20-40行属于可接受范围,40+以上要有备注说明其必要性类名及接口方法必须有备注说明,实现类中的方法可以不加。非接口实现类的公有方法必须有备注说明不允许出现Main方法,除非确实需要从命令行运行异常必须扔出或日志,如果抓住不作处理,需要有明确注释说明日志记录必须闭环(有开始,有结束)利用sonar进行检测,RCI(规则遵从指数)达到90%以上。
欢迎访问开源技术社区:http://bbs.tinygroup.org。本例涉及的代码和框架资料,将会在社区分享。《自己动手写框架》成员QQ群:228977971,让我们一起动手,了解开源框架的奥秘!