【51CTO.com独家特稿】 嘉宾介绍
罗果是Tiny开源框架创始人,主要关注技术领域为J2EE及应用开发平台,涉猎广泛。他在模块化、元数据、模板引擎、数据库分区分表、SOA等领域有较深入实践,吃过N多的亏,上过N多的当,当然也积累了N多的经验。
在业余时间,罗果热心于参与开源软件相关工作,在进行软件开源的同时,也编写了大量的技术博客,从问题、原理、实践方面进行了深入浅出的讲解。
他经常挂在嘴边一句话是: 好的软件设计是“品”出来的 。信奉好的软件架构一定是简单的。
下面是罗果先生回答51CTO小编的几个问题,我们整理出来以飨读者。
我在开发TinyFramework之前,也在公司的体制下主导了开发平台的开发,但是由于在公司体制下,需要完全按照公司的要求和规范来开发,实际上就要顾及各方面的平衡,而这些平衡可能会对一个框架产生严重的伤害。而我期望做一个各方面比较均衡的开发平台,于是就从各种小的专题性验证开始,比如:流程化编程、模块化设计、数据库分区分表等等一一进行验证,当验证的范围越来越大,涵盖的领域越来越多的时候,才真正开始决定做一个开源框架。
TinyFramework的立意是企业级的开发平台,因此在方法论、设计理念、开发体系、设计原则、生态圈、模块化、热部署、水平扩展、元数据等非功能性要求方面做了大量的探索和实践。
当然在功能性需求方面,也有非常多的突破,由于Tiny框架涵盖的功能太多,因此只拿几个有代表性的功能来简单介绍一下:
◆ TinyDBRouter(数据库分区分表) :基于JDBC层实现,可以支持SQL92规范下的各种数据库进行透明的数据库分区、分表读写分离等水平扩展。
◆ TinyTemplate(模板引擎) :一个类 Velocity的模板引擎,但是功能更强大,添加了许多Velocity不支持的特性,运行速率大致是Velocity的4倍。
◆ TinySqlDSL(数据库开发框架) :基于领域查询语言方式的数据库开发框架,可以在Java中用类似于写SQL的方式来进行数据库编程,比较好的解决了数据库与Java两层之间结合时的问题(要么两者是分离的如iBatis,要么引入一种全新的语言如Hibernate的HSQL,要么就是在Java中进行大量的SQL拼接)。当然数据库的开发方案有许多种解,各种解有各种解的优缺点,DSL方式也是一种实现方案,有其自己的优缺点。
◆ TinyUI(界面引擎) :主要解决WEB应用开发中的模块化和JS、CSS及各种静态资源管理的问题,主要解决静态资源Jar包化、CSS 合并打包压缩、JS合并打包压缩,UI模块之间的依赖关系等体系性问题。
◆ TinyStudio(集成开发工具) :提供了可视化界面设计,可视化流程编排、模板引擎编辑器、代码生成器,服务编辑器、元数据编辑器、数据库设计器。
在早期,我们还是默默无闻的,因为我们不想在框架还是一个半成品的时候就拿出来,直到我们已经开发完毕并且在项目组内进行了充分验证的时候才真正地在社区或相关网站进行发布。我们大致是从以下几个角度维护项目和社区的:
◆ 代码托管在开源中国的git仓库 :https://git.oschina.net/tinyframework/tiny。目前有294 watches,453 stars,361 forks。
◆ 构建Tiny文档WiKi :http://www.tinygroup.org/confluence/display/TF。Tiny文档总共有900多页,涵盖了设计、实现、示例、实践等各方面,目前日访问量在1500左右。
◆ 创建Tiny社区 :http://bbs.tinygroup.org。Tiny社区是新推出的专注入Tiny方面的交流与沟通平台。
◆ 创建Tiny交流QQ群 :228977971。QQ群采取比较严格的管理方式,对技术纯洁性保持良好。目前该群已有用户1000多人。
通过上面的一些与项目相关的社区、博客、QQ群等形式,我们与广大Java框架、Tiny爱好者进行了充分的互动与交流。不管是学习者、参与者、交流者、使用者,希望大家都有收获。同时,在这个过程中,我们也受益匪浅,对开源项目也有了更深入的理解。
使用灵活:可以整个使用它,也可以只用它的一个或几个部分。Tiny构建者认为,一个完整的框架可能需要由许多个部分组成,但是对于实际应用的用户来说,它可能只需要其中的一部分功能。框架一定要有这种能力,可以由使用者进行菜单式使用,避免只要用一点点功能,就要引入许多其他的功能。
学习成本低、上手容易:框架的学习成本必须非常低,才可以让使用者更容易上手,避免由于学习难度大而导致的学习曲线太陡、太长。
保持核心的稳定性:Tiny框架要求在稳定、安全要求非常高的应用环境中使用,因此其稳定性就是框架构建者首要思考的目标,核心部分只使用经过充分验证及广泛应用的第三方包。
资产的可积累性:只有易于知识积累,才可以真正做到越用越强。
约定优于配置原则-COC
不要重复你自己原则-DRY
减法原则 :减法原则是我们自己提出的,意思就是给程序员做减法。
模块化原则:模块化对于软件开发过程中的开发、高度、集成、发布、维护过程中所起的作用是节省可能要花费的大成本。因此,我们提出了Business Unit的概念,使得与模块相关的所有内容可以放在一块。
自动组装原则:在整个Tiny框架的构建过程中,都非常注重集成过程的自动组装,要求做到用户使用起来不用管,由框架自动集成。
下级服从上级原则:Tiny框架从框架层级做了限制,使得下级必须服务上级。
单一原则:通过单一原则进行强制性的约束,使得一个模块只解决单一模块应该解决的问题,从而避免不同的问题放在一起解决所导致的混合问题,同时也避免了不恰当的依赖及模板引用。
集中配置原则:我们对Tiny框架配置做了大量的工作,一个是COC方式,如果您不进行配置,可以采用系统默认的值;一个是集中原则,把需要人工配置的内容集中起来做统一配置;一个是对不需要人工干预的配置,那就集成在Jar包中,作为发布者发布项的一部分。