软件设计目标:实现需求、易于重用、易于理解、没有冗余。
Don't reinvent the wheel, just realign it. --Anthony J D’ Angelo
高内聚低耦合,是软件工程中判断软件设计好坏的标准。主要评判模块或类的内聚性是否高,耦合度是否低。目的是使模块或类的可重用性、可移植性大大增强。通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。
内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好只做一件事,它描述的是模块内的功能联系。耦合是软件结构中各模块之间相互联系的一种度量,耦合强弱取决于模块间接口的复杂程度。
在软件架构度量中,通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则是高内聚低耦合。
高内聚:尽可能类的每个成员方法只完成一件事,最大限度的功能聚合。
低耦合:减少类与类、模块与模块、层次与层次之间的交互复杂度,如接口数量、参数数量等。
增强内聚度方法
1、一个模块只对外暴露最小接口集,形成最低的依赖关系。
2、只要对外接口不变,一个模块内部的修改,就不得影响其他模块。
3、删除一个模块,应当只影响存在依赖关系的其他模块,而不应该影响其他无关部分。
降低耦合度的方法
1、少使用类的继承,多用接口隐藏实现的细节。Java面向对象编程(OO)引入接口除了支持多态外,隐藏实现细节也是其中一个目的。
2、模块的功能化分应该尽可能的单一,道理也很简单,功能单一的模块供其它模块调用的机会就少。(其实这也是高内聚的要求,高内聚低耦合可能同时出现)。
3、遵循一个定义只在一个地方出现。
4、少使用全局变量。
5、类属性和方法的声明少用public,多用private关键字。
6、多用设计模式,比如采用MVC(Model-View-Controller)的设计模式,可以降低界面与业务逻辑的耦合度。
7、避免用“硬编码”的方式写程序,避免直接用SQL语句操作数据库。
8、最后,避免直接操作或调用其它模块或类(内容耦合)。如果模块间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免内容耦合。