
迪米特法则(Law of Demeter,LoD),也叫最少知识原则,核心就一句话:一个类只该和“直接朋友”打交道,不该越级去调用陌生对象的方法。
谁算你的“直接朋友”?
判断标准很具体:当前类的成员变量、方法参数、方法内部创建的对象、以及this本身——这些才是合法的“朋友”。比如你有个User类,它持有一个Profile对象作为字段,那Profile就是朋友;但Profile里嵌套的Address就不是,不能写user.getProfile().getAddress().getCity()这种长链调用。
怎么避免“陌生人”通信?
遇到需要跨层访问的情况,优先在“朋友”类里封装好所需能力:
在Profile类中加一个getCity()方法,让User直接调用user.getProfile().getCity() 用接口或门面(Facade)统一暴露有限能力,隐藏内部结构 引入中介者(Mediator)或服务类来转发请求,把多对多关系转为一对多
别为了LoD牺牲可读性
过度遵守可能带来大量“胶水方法”,让代码变臃肿。关键看实际影响:
如果Address实现经常变,而User又频繁依赖城市信息,那封装getCity()就值得 如果只是临时调试或脚本场景,短链调用一次问题不大 领域模型中天然紧密关联的对象(如订单与订单项),适度耦合反而更自然
访问权限要配合收紧
LoD不是光靠调用方式,还得靠封装支撑:
字段尽量设为private,不提供无意义的getter/setter 内部工具类或辅助对象不暴露给外部,避免被误当成“朋友” 构造函数参数精简,只接收真正需要协作的对象
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)