|
方向:
-
双向依赖(差)
-
相互依赖的两个元素不能独立行动,在微服务系统架构的系统中类级别不会产生特别复杂的问题,但是在模块 or 系统级别就特别容易受到变化带来的影响。
-
举例:A <-> B,A调用B的b接口,B的b接口依赖A的a接口,如果a b接口都要变更,两个系统如何发布?A依赖B先发布,B也依赖A先发布,相互依赖的两个元素不能独立行动。
-
循环依赖(更差)
-
单向依赖(好)
链路:
-
深度
-
B调用A.getC().getD().getE().getF() 获取到F。
-
广度
-
在链路变宽的过程中不加以约束和管理很容易产生大杂烩的元素,也很容易产生双向和循环依赖。
方式:
-
内容耦合(高)
-
当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。
-
共享耦合/公共耦合(高)
-
指通过一个公共数据环境相互作用的那些模块间的耦合。
-
公共耦合的复杂程度随耦合模块的个数增加而增加。
-
控制耦合(中)
-
指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;
-
特征耦合/标记耦合(中)
-
指几个模块共享一个复杂的数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;
-
数据耦合(低)
-
指模块借由传入值共享数据,每一个数据都是最基本的数据,而且只分享这些数据(例如传递一个整数给计算平方根的函数)。
-
非直接耦合(低)
-
两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。
-
无耦合(无)
解决不良依赖:
-
管理复杂的依赖关系
-
依赖方向:使用单向依赖,去除或弱化双向依赖,不使用循环依赖。
-
依赖链路:遵守最少认知原则。
-
依赖方式:尽量使用数据耦合,少用控制和特征耦合,控制公共耦合的范围,不使用内容耦合,如果依赖的对象不稳定使用非直接耦合来弱化耦合紧密程度。
-
分配正确的职责减少不必要的依赖:专家、创建者。
-
通过其他原则和模式减少不稳定元素带来的影响:高内聚、纯虚构、控制器、多态、间接性、最少认知。
高内聚
内聚是对元素职责的相关性和集中度的度量。
问题:怎么样保持对象是有重点的、可理解的、可维护的,并且能够支持低耦合?
解决方案:按照相关性分配职责,可保持较高的内聚。
优点:
-
分解后的元素更加简单易于理解和维护。
-
按照相关性拆分可以提高重用性。
相关原则和模式:单一职责原则、关注点分离、模块化。
低内聚的缺点:内聚性较低的类要做许多不相关的工作,或需要完成大量的工作,这样的类会导致以下问题:
(编辑:四平站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|