用途:该技能用于代码审查与设计辅助,核心是「不要询问对象,而要命令对象」。它识别“先取对象内部状态、再在外部做判断并更新该对象”的写法,将其转换为由对象自身承担判断与行为的写法,从而强化封装、把职责集中到持有数据的对象上。
主要能力:提供判断流程(是否用 getter 取状态、之后是否用 if 判定)、反模式检测(如 if(obj.getX()>threshold){obj.setY(...)}、if(obj.getStatus()==ACTIVE){...}、obj.getA().getB().doSomething()、循环外部累加 item.getPrice()、按 user.getRole()==ADMIN 分支等),以及转换模式:状态判定内部化(user.isAdult(),或进一步 user.ifAdult(() -> allowAccess()))、条件分支多态化(user.sendNotification())、集合操作委派(order.calculateTotal())、Null 对象模式(user.getAddress().format() 由 NullAddress 返回默认值)。
使用方式:在代码审查、新实现或重构时按判断流程检查;发现反模式即考虑转换。资料提到语言别实现模式与重构步骤详见 references/patterns.md,并建议同时参考 law-of-demeter、first-class-collection、breach-encapsulation-naming 等相关技能。
适用场景:getter 后接 if 判定、同一判定逻辑散落多处、取状态后更新对象、按类型或状态分支的代码。
限制:避免过度应用,例如以显示或报表为目的的数据获取、DTO/值对象的简单取值、框架或库约束的情况;若类因此膨胀,应考虑拆分职责。具体安装与调用命令暂未提供。