迪米特法则(LoD,最少知识原则) 要求一个对象只与自己的“直接朋友”交互:自身、方法参数、自己创建的对象、自身的成员。不允许通过一连串调用深入别人的内部结构,即所谓“不要和陌生人说话”。
违反它的典型症状是“火车残骸”式代码 a.getB().getC().doX()。其危害:调用方与被穿透的每一层结构都产生了耦合,中间任何一层的结构变化都会波及调用方;暴露了内部表示,破坏封装,重构成本上升;测试时也不得不 mock 一整条链。实践中常见的折衷是“只许点一次”(one dot),并在中间层增加委托方法(如 a.doX() 内部自己转交)。
易错点:LoD 主要约束“对象向他人暴露结构”,对纯数据容器(DTO、值对象)适度放宽是常见共识;同时不要为了守法则而在中间类堆积大量无意义的转发方法,那说明职责划分本身可能有问题。追问方向:与封装、得墨忒耳式“告诉而非询问(Tell, Don't Ask)”的关系。