一、系统模块化的重要性:
对于目前绝大部分的项目而言,系统模块化的重要性不言而喻。一个良好的模块划分能够使得系统具有以下的优点:
1. 更高的可靠性
2. 更稳定的结构
3. 更强的维护性
4. 代码可重用性更强
5. 缩短项目开发周期
二、系统模块化的原则:
依据软件设计的模块化、抽象、信息隐藏和局部分等原则,能够得出模块化的独立性概念。
所谓模块独立性,即模块内部逻辑相对独立完整单一。
模块间联系尽可能少,详细表现为高内聚低耦合。
符合高内聚低耦合的模块,通常功能完整独立,数据接口简单,程序易于实现。
良好的结构划分,可以使开发者更好的理清业务逻辑结构,提取出公共的模块,系统模块化从而提高代码的可重用性。
易于理解维护,同一时候也限制了错误的作用范围。
使错误易于排除,因而可使软件开发速度快,质量高。
内聚度:
内聚度是指模块内部的联系紧密程度。
联系越紧,则内聚度越高,模块独立性越强,系统越易于理解维护。具有良好内聚度的模块应能较好的满足于信息局部化的原则,功能完整单一。
同时,模块的高内聚必定导致模块的低耦合度。
理想的情况是:一个模块仅仅使用局部数据变量,实现一个完整功能。
按由弱到强的顺序。模块的内聚度可分为下面几类:
1. 偶然内聚:模块内的各个任务没有什么有意义的联系,仅于偶然位于同块。
2. 逻辑内聚:一个模块完毕的任务在逻辑上属于同样或相似的一类(如依据參数不同。模块输出多种结果)。这样的内聚的模块存在一些致命的问题。
如修改困难、影响范围大、内部推断陷阱多、性能下降等。模块内部修改,须要考虑到其他模块的调用影响;模块内部须要判别调用者,使得模块外部间的联系增加;内部推断复杂,容易产生陷阱;需要装载模块过多,导致性能下降等等。
3. 时间内聚:一个模块中包括的任务须要在同一时间内运行(如初始化,结束等所需的操作)。
4. 过程内聚:一个模块内的各个处理元素是相关的。并且必须按固定的次序运行,表现为有次序的流程,面向过程化的思维很多是采用这样的方式进行模块/函数的划分。
5. 通信内聚:一个模块中的各处理元素必须要引用共同的数据。
6. 顺序内聚:一个模块内各处理元素关系密切,必须按规定的处理次序顺序运行,后运行的语句/段往往依赖先运行的语句/段。
7. 功能内聚:一个模块仅完毕一个单一的功能。且该模块的全部部分是实现这一功能所必须的,没有多余的语句。功能内聚是内聚度最高的一种模块类型,结构紧凑。逻辑清晰。易于理解。便于维护,可靠性强,稳定性高,因功能单一,复用性高。在划分模块的时候,应追求此类型。
耦合度:
耦合度是从模块外部考察模块的独立性程度,用来衡量多个模块间的相互联系。普通情况下耦合度应从下面三方面考虑:
1、耦合内容的数量:
模块间发生联系的数据和代码的多少,多则高,少则低。
2、模块的调用方式:
模块间代码数据共享的方式:直接调用、依赖调用、载入调用等。
3、模块间的耦合类型:
耦合类型有下面几种方式:
1. 独立耦合:模块间彼此独立,没有直接联系,且属于同个软件系统或隶属同一上层模块。
2. 数据耦合:模块间彼此交互数据,接受返回值。传递数据參数,通常应用在保持模块间的关系为数据耦合。
3. 控制耦合:模块间传递的是控制參数而非数据參数,用于控制另一个模块的处理逻辑。这说明另一个模块内部存在多个并列的逻辑路径,通过提高被调用模块的内聚性,能够彻底的去除这样的联系。因为添加了设计理解的复杂度。应避免使用该耦合方式。
4. 公共耦合:又称公共环境耦合或数据区域耦合。若模块间对同一数据区域进行存取操作,则模块间的关系为公共耦合。
5. 内容耦合:一个模块直接访问另一个模块内部代码或数据,出现内容耦合。内容耦合严重破坏了模块的独立性和系统结构化,代码互相纠缠,执行错综复杂。不建议使用。
三、系统模块化方法
基于需求功能划分:
依据用户需求归类的不同,对模块进行大粒度的划分,如用户管理模块、业务模块、订单流程模块等。
基于系统层次划分:
依据模块上下级,同层类别的关系进行模块划分,如展现层,业务层,数据层等。
基于专业领域划分:
依据解决的问题域的不同。对模块进行划分,如人机交互领域、数据库领域、网络通信领域、数据加解密、图形图像等。