以下内容来自《Microsoft .NET企业级应用架构设计》
高内聚表示某个特定的软件模块----无论是一个子程序,一个类型还是一个类库,都应完成一系列极为相关的功能。换句话说,内聚表示同一个类型中不同方法,同一个类库中不同函数,同一个方法中不同操作所表达的逻辑之间的距离。
我的理解是你在订单模块中尽量只写有关于订单的代码,不要在里面写关于用户模块的代码。如需要修改用户,你可以调用用于模块的接口完成功能。
Ward Cunningham为内聚给出了一个简洁实用的定义。在他看来,如果修改了模块A,且不会影响到模块B,那么A和B这两个模块就有了足够的内聚,值得在系统中使用。
还有一句话,可以用来巩固前面提到的内聚概念。Cunningham建议,模块的内聚的高低程度与其担当的职责多少成反比关系。
耦合用来度量两个软件模块,例如,类型,函数或类库之间的依赖程度。耦合的一个非常经典的描述来自Cunningham的wiki。若每次修改模块A时都要修改模块B,那么A和B者两个模块是耦合的。
低耦合并不是说你的模块应该与其他模块完全隔绝。模块之间显然需要通讯,不过通信应该依赖于一系列设计良好且不易改变的接口。每个模块都应该在无需了解另一个模块内部实现细节的情况下与之良好的配合。
相反的,高耦合会阻碍测试过程,降低代码重用性并影响代码的理解。高耦合也是导致软件易碎,坚硬的一个原因。