Tiny开源框架创始人罗果:开源的初衷是为了验证想法覆盖面广。在模块化、元数据、模板引擎、分库分表、SOA等领域都有深入的实践,吃过很多亏,也受过很多骗,当然也积累了很多的经验。 在业余时间,罗果热心参与开源软件相关工作。在做开源软件的同时,他也写了大量的技术博客,从问题、原理、实践等方面深入浅出地讲解。 他常说的一句话:好的软件设计源于“品质”。相信一个好的软件架构一定是简单的。 以下是郭老师对小编问题的解答,我们整理给各位读者。 1。开发TinyFramework的初衷是什么? 在我开发TinyFramework之前,我也在公司体制下主导过开发平台的开发,但是在公司体制下,需要完全遵循公司的要求和规范。开发,其实必须要考虑到各方面的平衡,而这些平衡可能会对一个框架造成严重的破坏。而我期望是一个各方面都比较均衡的开发平台,所以我从各种小的主题验证入手,比如:流程化编程、模块化设计、分库分表等,逐个验证一个一、当验证的范围越来越大,涵盖的领域越来越多的时候,才真正开始决定做一个开源框架。 所以追根溯源,本意是为了验证自己的一些想法。 2。前段时间,TinyFramework刚刚推出了2.0版本。新版本有哪些新功能?一年的发展过程中,有哪些值得记录的故事? TinyFramework旨在成为企业级开发平台。因此,在方法论、设计理念、开发体系、设计原则、生态系统、模块化、热部署、水平扩展、元数据等非功能需求方面进行了大量的探索和实践。 当然在功能需求方面也有很多突破。由于Tiny框架涵盖的功能太多,这里只简单介绍几个有代表性的功能: TinyDBRouter(数据库分区表):基于JDBC层实现,可以支持SQL92规范下的各种数据库进行数据库透明分区,分表读写分离,等横向扩展。 ◆TinyTemplate(模板引擎):类似于Velocity的模板引擎,但是更加强大,加入了很多Velocity不支持的特性,运行速度大约是Velocity的4倍。 TinySqlDSL(数据库开发框架):一种基于领域查询语言方法的数据库开发框架,可以用类似于写SQL的方式用Java进行数据库编程,更好的解决了两层结合的问题数据库和Java(要么两者分离如iBatis,要么引入新的语言如Hibernate的HSQL,要么在Java中进行大量的SQL拼接)。当然,数据库开发的解决方案有很多种,每种方案都有自己的优缺点。DSL方式也是一种实现方案,有其优缺点。 TinyUI(界面引擎):主要解决WEB应用开发中的模块化和JS、CSS及各种静态资源管理等问题。系统问题,例如UI模块之间的依赖关系。 ◆TinyStudio(集成开发工具):提供可视化界面设计、可视化流程布局、模板引擎编辑器、代码生成器、服务编辑器、元数据编辑器、数据库设计器。 3。你平时是如何维护TinyFramework项目和社区的? 早期我们还默默无闻,因为我们不想在框架还是半成品的时候拿出来,等到我们开发好了,在项目组的时候,内容才是充分验证是否可以在社区或相关网站上发布。我们一般从以下几个角度来维护项目和社区: ◆代码托管在开源中国的git仓库:https://git.oschina.net/tinyframework/tiny。目前有294只手表,453颗星星,361把叉子。 ◆构建微型文档维基:http://www.tinygroup.org/confluence/display/TF。Tiny文档共900多页,涵盖了设计、实现、实例、实践等内容,目前日访问量在1500左右。 ◆创建Tiny社区:http://bbs.tinygroup。组织。TinyCommunity是新推出的一个专注于Tiny的交流交流平台。 ◆创建微信QQ群:228977971。QQ群采用比较严格的管理方式,保持良好的技术纯度。该群组目前拥有超过1,000名用户。 通过以上一些项目相关的社区、博客、QQ群等,与Java框架和Tiny爱好者进行了充分的互动和交流。无论是学习者、参与者、传播者,还是使用者,都希望大家都有所收获。同时,在这个过程中,我们也受益匪浅,对开源项目有了更深入的了解。 4。TinyFramework有哪些优势和特点?有什么特殊或创新的技术应用吗? ◆设计理念决定设计目标 使用灵活:可以整体使用,也可以只使用其中的一个或多个部分。Tinybuilder认为,一个完整的框架可能需要由很多部分组成,但对于实际的应用用户来说,可能只需要其中的一部分功能。框架必须要有这个能力,用户可以在一个菜单中使用,避免只用到几个功能就引入很多其他的功能。 学习成本低,易上手:框架的学习成本必须非常低,让用户更容易上手,避免学习曲线太陡太长导致学习困难。 保持核心稳定性:Tiny框架需要在稳定的应用环境中使用,对安全性要求非常高,因此其稳定性是框架构建者首先考虑的因素。核心部分只使用经过充分验证和广泛使用的第一个Triplepack。 积累资产:知识容易积累,才能真正发挥更大的作用。 设计原则是解决冲突目标时的解决策略程序员做减法。 模块化原则:模块化在软件开发过程的开发、高度、集成、发布、维护中发挥作用,以节省可能花费的大笔成本。所以,我们提出了BusinessUnit的概念,把模块相关的所有内容都放在一起。 自动组装原理:整个Tiny框架在构建过程中,非常注重集成过程的自动组装,要求用户无忧使用,框架自动集成。 下级服从上级原则:Tiny框架限制了框架层级,下级必须为上级服务。 单一原则:通过单一原则强加强制约束,让一个模块只解决单个模块应该解决的问题,从而避免不同问题一起解决导致的混合问题,避免不恰当的依赖和模板引用。 集中配置原则:我们在Tiny框架的配置上做了大量的工作。一种是COC方法。如果不配置,可以使用系统默认值;另一种是集中式原则,需要手动配置。统一配置;一种是不需要人工干预的配置,作为发布者发布项的一部分集成在Jar包中。#p# ◆一些创新的技术应用 SOA:Tiny的服务一次开发,处处使用,即服务开发完成后,可以使用RMI、WebService、Json、Xml等,或者以您想不到的其他方式拨打服务电话。 服务级别扩展能力:在遵守Tiny开发规范的前提下,可以轻松进行接入层和服务层的水平扩展。也就是说,当你的处理能力不足的时候,你可以通过增加一台机器来增加处理能力,而不需要对现有的运行环境做任何改变。 模块化技术:Tiny的模块化设计思想是万物皆可模块化,即所有的文件都可以放在一个Jar包中,甚至Jsp也可以放在一个Jar包中。通过模块化技术,我们可以很容易地分离和重用模块。 自组装技术:Tiny的自组装设计思路是,所有模块添加时可用,移除时消失。也就是说,如果使用别人的组件,只需要通过Maven进行依赖即可;如果你不想使用它,只需取消Maven依赖。这将大大减少与集成相关的工作量。 热部署技术:热部署的做法有很多,比如OSGI,但是无论是哪一种,都存在一定的强依赖性,或者侵入性。Tiny的热部署实现机制就简单多了,只要按照正常方式开发Jar包,配置一个Bundle声明文件即可。在实际应用中,可以按照Bundle机制运行,也可以按照普通的Jar包运行。 UIML技术:UIML是统一界面描述语言的意思。通过这个特性,再加上配套的可视化界面设计工具,就可以实现开发一个随处可用的界面的目标。 AOP缓冲框架:能够有效分离缓冲和业务代码,透明切换缓冲方案,大大降低缓冲相关代码编写的开发重构成本。 文档生成框架:根据Tiny开发规范开发,可以通过工具自动生成很多文档。文档和代码不一致不再是问题,还能节省大量的文档编写时间。 5.TinyFramework目前的用途是什么?能否分享一下成功的应用案例? TinyFramework从第一版开始发布,目前主要在公司内部推广应用。同时基于Tiny开发出众多企业级、互联网级产品,并被数十家客户使用。自产品开源以来,很多团队或者公司在申请的过程中提出了很多好的意见、建议和需求,甚至有的直接为我们提交了PullRequests。一年来,Tiny的社区环境越来越完善。预计2015年,TinyFramework的外部用户数量会有较大的增长。 6。你能介绍一下你的开发团队吗?你们通常如何沟通和协作? TinyFramework的开发团队由稳定的团队成员组成。我也尝试过招募一些愿意参与的粉丝,但实际执行效果不是很好。当然,原因是多方面的。我也理解没有坚持的参与者。 团队成员的主要沟通方式如下: ◆团队建设:在过去的一年里,我们一起聚餐讨论了20多次。吃饭的原因有很多种,比如家里添娃、技术升级、产品获奖等等。当然最常见的吃饭原因还是技术原因,比如严重的bug、严重的设计缺陷、提交的代码影响发育。大家边吃边聊,提高自己的技术能力,同时也让大家认识到这类错误的根源,保证下次不会再出现类似的问题。 ◆GIT中的问题:团队有一个口头禅,但话不算数。不管是requirement还是bug,都要进入Issues,由所有管理员统一协调管理。提出问题、评论问题、解决问题、跟踪问题和关闭问题都在Issues中进行管理。 无论是线上还是线下的交流,都对我们的团队合作和和谐发展起到了非常重要的作用,相得益彰。 7。能谈谈您对开源和国内开源技术和产品的理解吗?理解。 关于收入的问题,如果你指望开源能快速给你带来收入,大部分人可能会失望。总的来说,一个开源产品从起步、发展、盈利,到最终实现收入平衡,是一个漫长而艰难的过程。 开源不在乎收入,为什么要开源?我觉得可能有以下几种可能: 获得精神上的满足 在此,我并没有太大的成就感。如果它开源并提供给所有人,开发人员将获得一些成就感。 ◆获得社会认可 通过开源,可以获得相当的社会认可和与他人合作的机会,可能更有可能赢得更好的发展或工作机会。 ◆收集需求 一个人在那里做,总是有这样或那样的限制。即使你是超级大人物,通过免费给别人使用,别人也可以给你各种意见和建议,可以帮助你快速丰富和完善产品。 ◆用户测试 有时候,你做了一些东西,但你不知道它好不好。现在很多用户都在用,其实是在帮你测试。 ◆获取用户群 有时候,一个产品在那里的价值不大,但随着用户群的增长,它可能有盈利的潜力。同时,也是潜在用户的培养。如果有更多的人免费使用它,可能会有人愿意为更好的服务和产品或定制开发付费。 ◆一种营销方式 产品本身做的不错。通过开源,获得了市场认可,提高了知名度,为后续推广奠定了基础;同时让人看到内部实现,从黑盒变成白盒。盒子,让人放心选择。 当然,也可能是其中的一部分,也可能是全部。总之,开源是一个艰难的选择,需要长期的坚持和不急不躁的态度。 所以,开源是一种修行。在这个阶段,你可能是一个没有成就的凡人,也可能是一个小成就的佛弟子,更有可能是一个有大成就的尊者,甚至是最真实、最无上的。佛。 接下来回答国内对开源技术和产品的看法: 其实开源项目的发展也是符合螺旋式轨迹的。整体来看,国内对开源的认识也是在对免费使用的初步认识上向更高层级递进。总体来说,中国的开源技术和产品还比较处于早期阶段,比如:只是开放代码,没有后续的社区建设,没有形成生态系统等各种限制。但是,由于中国开源产品基数大,我们可以看到越来越多优秀的开源开发者和开源产品不断涌现,这也符合量变导致质变的客观规律。与这些优秀的开源产品相比,Tiny框架还比较不成熟,还有很大的差距,但我们相信只要能践行我们团队的座右铭“Thinkbig,startsmall,scalefast!”,我们必将成为优秀的开源产品之一。 欢迎多多关注我们的Tiny社区:http://bbs.tinygroup.org。关于Tiny的话题,欢迎加入QQ群:228977971。
