悠然乱弹:聊聊模块化

序言

熟悉了TINY相关开源内容的同学都有一个印象,那就是Tiny框架的目录分得非常细,比如Tiny工程的目录结构是下面的样子的:

比如TinyUiEnterprise项目的目录结构是这样的:

再比如,我们开源的软件开发过程管理软件的地目录结构是这样的:

有少许的人看了之后,深以为然,而更多的人看了之后却觉得莫名其妙。所以今天就乱弹一下模块化。

什么是模块化?

百度了一下,发现下面的说法非常经典,就此引用一下:模块化是一种处理复杂系统分解为更好的可管理模块的方式。

百度百科中,关于模块化设计是这样描述的:

模块化设计,简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系。逐步求精的结果是得到一系列以功能块为单位的算法描述。以功能块为单位进行程序设计,实现其求解算法的方法称为模块化。模块化的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化。

前半拉和我想表述的意思没有太大关系,大家只要看我加粗变红了的部分,就可以了。

TINY框架模块化之后的效果

  1. 随心所欲:想要啥就要啥,不想要啥就不要啥
  2. 自动组装:只要通过POM依赖或去除依赖,就可以增加或去除某一功能及其相应配置

这么说说可能比较抽象,那我说几个场景。

比如:我们经常要写Servlet、Listener、Filter,而按照J2EE早期规范,这些东西的使用是要在web.xml中配置一些内容的,而这些配置的增加或删除就会导致程序的设计和调试的复杂化,而且用了Tiny框架的模块化方面的支持,程序员只要按规范开发这些东西就好,而不必对web.xml进行相关的修改,是不是对于开发和使用都非常方便了?

比如:我们要做一个UI组件,UI组件一般会涉及到各种JS资源、CSS资源、图片、视频、字体等静态资源,按照HTML规范,我们的开发人员要使用一个UI组件,一般情况下是要引入JS、CSS资源的,而引入的顺序又是非常有讲究的,如果程序员只是依赖一个Jar包就可以,而不用关心所有的这些静态资源的位置和处理,也不用关心JS、CSS的引入,是不是对于开发和使用都非常方便了?

比如:我们在开发项目的时候,一种情况下是整个项目都放在一起的,如果能把一个完整的项目分成多个高内聚低耦合的许多个模块,那么对于开发、测试、部署是不是更加方便?是不是就更容易复用?

当然,这里举的例子还只是冰山一角。

接下来看看一张TINY框架的架构图

实际上,最终我们要把所有的软件资产都向资产库迁移--而资产库中都是我们的一个一个或小或大的模块,甚至于我们的业务单元也变成资产库中的资产。

这个时候我们的发布模式就变成下面的样子:

一个软件应用的构建只不过是制订发布计划、资产选取和参数配置而已。

总结

这里只是举了几个简单的场景,但是为了实现模块化,TINY框架做了大量的工作,解决的各种问题也多了去了。所以,模块化不是想做就可以做的,它是一个系统性工程,而系统性工程其复杂度与实现难度都是非常高的。

限于篇幅,今天只是简单乱弹了一下,感兴趣的同学可以在下面留言或通过其他方式进行探讨。

时间: 2024-11-01 11:52:58

悠然乱弹:聊聊模块化的相关文章

悠然乱弹:螺旋矩阵和蛇型矩阵的悠然版实现

螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵,有许多的公司面试题中有出现,这两个题的答案也有许多种,简单问一下度娘,就各自有N种实现,来源也非常丰富,比如CSDN.ITEYE.等等,当然也包括著名的OSC,但是整体看下来,呵呵,比较顺眼的比较少,比较经典的就越发少了. 考虑到不同的语言有不同的语言特性,因此今天就只用Java来进行实现,看看螺旋矩阵和蛇型矩阵的悠然版实现,让我们的OSC也更加高大上一些,. 概念说明 什么是螺旋矩阵 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,

悠然乱弹:拉钩网FizzBuzzWhizz试题之悠然版解答

试题 ? 1 2 3 4 5 6 7 你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏.此时有100名学生在上课.游戏的规则是:   1. 你首先说出三个不同的特殊数,要求必须是个位数,比如3.5.7. 2. 让所有学生拍成一队,然后按顺序报数. 3. 学生报数时,如果所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz:如果所报数字是第二个特殊数(5)的倍数,那么要说Buzz:如果所报数字是第三个特殊数(7)的倍数,那么要说Whizz. 4. 学生报数时,如果所

悠然乱弹:我的架构观

既然是乱弹,当然就不能全用正理推断,因此文中有文不对题的,思维混乱的都属正常范畴,大家谅解则个.  架构,是一个神秘也是一个普通的词汇. 曾几何时,君不见现在架构师就像雨后春笋似的,忽如一夜春风来,千树万树上面结的都是架构师,不管是招聘的,不管是应聘的,动辄就是资深架构师,高级架构师云云. 有的人说,架构是搞一堆时髦的大家不理解词汇,最好是一堆一堆的英文缩写,网上有的,网上没的,就象华为似的,任你是国内的国外的,没有缩写词词典管叫你寸步难行,然后再弄一大堆理论出来,然后架构就有了.  有的人说,

悠然乱弹:挑战编程极限的问题终于有解了

问题的来历 在群里面一个小萝莉非要说拜我为师,呵呵,对于程序媛我一向--嗯嗯觉得程序不如人好看,再加上该名萝莉大学还没毕业,术语都多半没有听过,于是就想着拒绝,当时嘴一贱,就说了一句:你用一个For循环做个99表出来. 当然,这个对于小萝莉们来说,已经足够形成挑战了,但是对于群里的一众大佬们来说,自然是不在话下,3下5除二就搞定了.我又异想天开一下,如果不用判断语句,是不是也完成呢?粗想想是可以的,于是动手摆了几行代码,确实可以.于是就不断加码,不断增加新的完成条件,于是就形成了下面的问题,挑战

悠然乱弹:如何正确看待加入Tiny团队先从测试用例编写和文档编写开始?

有一个同学,问我一个问题:加入Tiny是否必须从写单元测试用例和文档作起? 此问题引发我诸多感触,故形成乱弹一篇. 作为一个新加入者,多看.少说,是正点.而这个时候,写写测试用例.文档,就是个不错的选择.这样入手比较容易,也比较容易体现水平. 可以说好的程序员,测试和文档都是写得好的.测试和文档一定写不好的,一定不是好的程序员.  同时,在看代码,写测试用例.写文档的过程中,还可以这样思考: 他为什么要这么设计?换成我,我会怎么设计?然后有相当一部分,会转化成:哦,原来是这个样子的!这个时候你进

悠然乱弹:“最好的模板引擎”Beetl 剖析及与Tiny模板引擎对比

Beetl的环境搭建 输入命令 ? 1 git clone https://git.oschina.net/xiandafu/beetl2.0.git 不一会儿,输出了下面的内容 ? 1 2 3 4 5 6 7 Cloning into 'beetl2.0'... remote: Counting objects: 5807, done. remote: Compressing objects: 100% (2145/2145), done. remote: Total 5807 (delta

悠然乱弹:切身体会来说明人性化设计的重要性

故事一: 昨天晚上入住在北京南站的速8酒店,不为别的,就为今天坐高铁方便. 首先是上WiFI,找到个NANZHAN free WIFI的热点,EN,看名字就知道是南站免费的WIFI热点,OK,感觉不错,赞一个. 选择连接,一段时间之后,弹出一个浏览器窗口,如下: 一看上面的窗口,本身的感觉是点击"短信获取免费帐号",结果出来一个错误:"获取免费帐号失败". 但是啥原因呢??没有说. 第一感觉是是不是后台出问题了?再试一下?还是原样的错误,还是不行. 后来就猜,是不是

悠然乱弹:从一段代码讲开去

序言 今天偶然看到一框架,在框架的里面有一段这样的描述: ? 1 2 xxx并不愿意其他人来直接修改YYY框架的代码,因为XXX致力于将它打造为完美的作品,其他人写的代码,实在没有加入进来的意义. 但是您可以当小白鼠,提意见,提bug,好的idea我还是愿意接受的. 这里解释一下,其中xxx是作者名字,YYY是框架名称,这么OSC上牛人众多,牛到这个程度的还是第一次见到,于是就想去速度学习一下.其实框架好不好,看例子代码就可以看出一二,去找了找,果然找到了示例代码,我摘了两个方法: ? 1 2

悠然乱弹:从几个方法的重构讲开去--性能大优化

现在还存在多次扫描处理的问题,也就是说虽然代码结构性重构是成功的,但是性能问题还是没有根本解决. 在给出解决方案之前,需要对这个处理方式缕一缕: 处理方式1:每次遍历全路径找到待处理文件,文件然后批量进行处理.优点是处理起来比较简单,但是会重复扫描. 处理方式2:一次遍历所有文件,然后对每个文件进行注解检测.扫描全路径只有一次,然后要把每个文件与过滤器进行比较如果比较成功那就做,比较不成功就不做. 稍加分析就会发现,两种方式的比较次数是一样的,但是第二种方案遍历文件的次数就少到极限了,还能比1次