迪米特法则
迪米特法则
迪米特法则(Law of Demeter
,LOD
),或者 The Least Knowledge Principle
。
英文描述:
1 | Each unit should have only limited knowledge about other units: only units “closely” related to the current unit. |
中文翻译:
1 | 每个模块(unit)只应该了解那些与它关系密切的模块的有限知识(knowledge)。 |
一、如何理解迪米特法则?
不和陌生人说话,其含义就是:
- 每个模块与其他模块的关系尽可能地少
- 每个模块只需要依赖必要的模块
简单点说就是:
- 模块之间的关系尽可能地少
要尽可能地减少模块依赖关系。
比如,用户模块的接口:
1 | public interface UserService { |
假如有某一个模块需要登录功能,但又不需要其他的用户功能。
如果用 UserService
接口的话,就会显得依赖的东西比较多。
这个时候可以将接口拆分出一个登录接口 LoginService
:
1 | public interface LoginService { |
需要登录的模块只需要 LoginService
这个接口就足够了。
迪米特法则要求模块之间的依赖关系要尽可能地少。
二、为什么要迪米特法则?
- 依赖关系越少,模块之间就越符合高内聚、低耦合
- 依赖关系越少,改动单个模块时就越不容易影响其他模块,整体就越稳定
三、如何做到迪米特法则?
迪米特法则目的就是要减少模块之间的依赖关系。
因此只要能减少依赖关系,就是符合迪米特法则的:
- 面向接口编程,模块之间只调用对外的接口
- 不要设计大而全的接口,接口粒度尽可能小,满足业务需求即可
- …
总而言之,迪米特法则的目的还是为了实现低耦合,只要能降低耦合度就行。