知识卡片
依赖关系的方向性与非传递性
内容
如果改变一个元素(供应者)的定义会迫使另一个元素(客户)跟着改变,二者之间就存在依赖。依赖是控制系统改动范围的核心工具:依赖失控会让一处改动产生大范围波动。表示层依赖领域层、子类依赖超类是典型单向依赖,反过来不成立,这种单向性使改动表示层不会波及领域对象。依赖默认不可传递(不像”胡子长度”那样能逐级推导),判断改动影响范围要看直接依赖而非假设传递。避免环状依赖(尤其包之间)是控制波动效应最重要的实践。
结构图:
flowchart LR
A[Benefits Window 表示类] -->|依赖| B[Employee 领域类]
B -.不反向依赖.-> A
C[Data Gateway 类] -.无直接依赖.-> A
B --> C
参考来源
- 位置:《UML精粹:标准对象建模语言简明指南(第3版)》第3章《类图:基础》(源文件:_epub-src/EPUB/2.xhtml)
- 结论依据:原文用Benefits Window依赖Employee的例子说明"这里重要的是依赖只有一个方向,从表示类到领域类……我已发现表示和领域逻辑严格分离,表示依赖于领域,但反之不是",并指出"基本的依赖不是可传递的关系",需要用环状依赖控制来管理波动效应。
- 原始内容:Benefits Window类……依赖于Employee类……这里重要的是依赖只有一个方向,从表示类到领域类。这样,我们知道可以自由地改变Benefits Window,而不会对Employee或其他领域的对象有任何影响……基本的依赖不是可传递的关系。