用途:在代码审查中检查过度耦合与深层对象链,当用户提到“too coupled”“train wreck”“chained calls”“feature envy”等时使用。应用前若存在 .agents/stack-context.md 应先读取,并按检测到的技术栈惯用模式应用;框架细节可用 context7 MCP 或网络搜索确认,不要猜测。
原则:组件只与直接协作者通信,不穿透对象访问其内部或子对象内部。方法只应调用自身、自身字段、参数、自己创建的对象以及全局/单例服务上的方法。
主要能力与规则:不穿透对象链,需要深层数据时让直接持有者提供,如 order.shipping_city() 而非 order.customer.address.city;告知而非询问,让对象自己完成内部决策;在边界包装外部 API,只暴露所需形状;跨边界传递数据时扁平化;限制参数知识,只接收直接需要的字段。
反模式:火车残骸(如 app.config.database.connection.pool.max_size)、特性依恋、透明包装器、测试中深层 mock。
边界:不适用于纯数据结构(DTO、字典、值对象);不意味着包装一切,只在内部结构可能变化的有意义边界应用;流式/构建器 API 因返回自身不算违规;与 KISS 存在张力,仅在耦合风险真实处应用。
审查清单:是否存在 3 层以上穿透对象边界的访问链;函数是否访问他人内部多于自身;外部 API 响应是否在边界包装;传入对象的内部结构变化是否会破坏代码;测试是否被迫构建深层对象图。
相关技能:solid、separation-of-concerns、kiss。