知识卡片
迪米特法则与依恋情结坏味道
内容
迪米特法则(Law of Demeter):一个对象/方法只能调用①该对象本身、②作为参数传进来的对象、③在方法内创建的对象。Wallet 既非参数、又非方法内创建、也不是 Cashier 本身,故 Cashier 不该与 Wallet 协作、甚至不该知道它存在。与之对应的坏味道是“依恋情结(feature envy)”——Fowler:函数对某个类的兴趣高过对自己所处类的兴趣,焦点通常是数据。该坏味道说明职责分配有误。发散:代码里出现 a.getB().getC().doX() 链式取数再自行处理,基本就是违反迪米特法则+依恋情结的双重信号。
参考来源
- 位置:《解构领域驱动设计》附录A A.2.1(源文件:_epub-src/OEBPS/034.xhtml)
- 结论依据:原文给出迪米特法则的三条可调用对象,并引用 Fowler 对依恋情结坏味道的定义。
- 原始内容:该法则要求任何一个对象或者方法,只能调用下列对象:·该对象本身;·作为参数传进来的对象;·在方法内创建的对象。