迪米特法则

迪米特法则

迪米特法则(Law of DemeterLOD),或者 The Least Knowledge Principle

英文描述:

1
2
Each unit should have only limited knowledge about other units: only units “closely” related to the current unit.
Or: Each unit should only talk to its friends; Don’t talk to strangers.

中文翻译:

1
2
每个模块(unit)只应该了解那些与它关系密切的模块的有限知识(knowledge)。
或者说,每个模块只和自己的朋友“说话”(talk),不和陌生人“说话”(talk)。

一、如何理解迪米特法则?

不和陌生人说话,其含义就是:

  • 每个模块与其他模块的关系尽可能地少
  • 每个模块只需要依赖必要的模块

简单点说就是:

  • 模块之间的关系尽可能地少

要尽可能地减少模块依赖关系。

比如,用户模块的接口:

1
2
3
4
5
6
public interface UserService {
boolean register(String userName, String password);
boolean login(String userName, String password);
User getUser(String userId);
boolean deleteUser(String userId);
}

假如有某一个模块需要登录功能,但又不需要其他的用户功能。

如果用 UserService 接口的话,就会显得依赖的东西比较多。

这个时候可以将接口拆分出一个登录接口 LoginService

1
2
3
4
public interface LoginService {
boolean register(String userName, String password);
boolean login(String userName, String password);
}

需要登录的模块只需要 LoginService 这个接口就足够了。

迪米特法则要求模块之间的依赖关系要尽可能地少。

二、为什么要迪米特法则?

  • 依赖关系越少,模块之间就越符合高内聚、低耦合
  • 依赖关系越少,改动单个模块时就越不容易影响其他模块,整体就越稳定

三、如何做到迪米特法则?

迪米特法则目的就是要减少模块之间的依赖关系。

因此只要能减少依赖关系,就是符合迪米特法则的:

  • 面向接口编程,模块之间只调用对外的接口
  • 不要设计大而全的接口,接口粒度尽可能小,满足业务需求即可

总而言之,迪米特法则的目的还是为了实现低耦合,只要能降低耦合度就行。

作者

jiaduo

发布于

2022-11-05

更新于

2023-04-03

许可协议