主页

索引

模块索引

搜索页面

迪米特法则-LoD

  • Law of Demeter

  • The Least Knowledge Principle(最小知识原则)

备注

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. 有依赖关系的类之间,尽量只依赖必要的接口(也就是定义中的 “有限知识”)

备注

迪米特法则是希望减少类之间的耦合,让类越独立越好。每个类都应该少了解系统的其他部分。一旦发生变化,需要了解这一变化的类就会比较少。

  • Demeter 不是一个人,而是一个项目,项目主页 http://www.ccs.neu.edu/research/demeter/

  • Demeter 是希腊神话中的大地和丰收女神,也叫做德墨忒尔。

  • 最早提到迪米特法则的论文出版于 1989 年: Assuring good style for object-oriented programs

  • 1996 年出版,Adaptive Object-Oriented Software: The Demeter Method with Propagation Patterns

原文

The Law of Demeter (“talk only to your friends”) is a good place to start, but think about it this way: you can play with your toys, with toys that you make, and with toys that someone gives you. You don’t ever, ever play with your toy’s toys.

高内聚/松耦合

备注

“高内聚、松耦合” 是一个非常重要的设计思想,能够有效提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。“高内聚” 用来指导类本身的设计,“松耦合” 用来指导类与类之间依赖关系的设计。

所谓高内聚:

就是指相近的功能应该放到同一个类中,不相近的功能不要放到同一个类中。
相近的功能往往会被同时修改,放到同一个类中,修改会比较集中,代码容易维护。

单一职责原则是实现代码高内聚非常有效的设计原则。

所谓松耦合:

在代码中,类与类之间的依赖关系简单清晰。
即使两个类有依赖关系,一个类的代码改动不会或者很少导致依赖类的代码改动。

依赖注入、接口隔离、基于接口而非实现编程,以及迪米特法则,都是为了实现代码的松耦合。

主页

索引

模块索引

搜索页面