SuperAPI AI 工具集

oop-best-practices

编程与开发

查看项目

更新于 10-19 16:15

技能介绍

OOP Best Practices 是一个面向对象编程的 AI 技能,适用于塑造可读性、内聚性和长期可维护性的日常编码决策。当任务需要更强的命名与更明确的抽象、更清晰的对象职责与封装不变式、基于消息的协作与面向角色的对象,或日常设计中的组合优于继承时,可优先使用。

工作方式:为下一位读者写代码,而不仅为编译器;让行为靠近拥有该概念的对象;偏好简单协作而非巧妙的对象图;用名称、边界和 API 揭示意图;让对象在可能时携带自己的规则。

评审工作流:一,识别概念——这段代码在建模什么概念、哪些规则或不变式属于该概念;二,检查边界——对象暴露的是原始数据还是有意义的行为、调用方是否被迫了解过多内部结构;三,检查形状——方法是否混合多个抽象层级、类是否承担多个变更理由、名称是否足够明确;四,应用最轻量的有用改进——为清晰重命名、提取方法、提取值对象、提取一等集合、把行为移到拥有数据的对象、按职责拆分类。

额外评审视角:命名与抽象纪律方面,名称弱时先质疑抽象,避免过早抽象抹掉概念或猜测过多未来复用,去除重复知识而非仅重复语法;封装与对象职责方面,把规则移到拥有它的概念,概念有有意义行为时优先富对象而非数据载体,对象能拥有规则时服务只做编排;基于消息的设计方面,偏好向协作者请求有意义的行为而非拉取数据,依赖角色与消息而非具体内部结构,保持公共接口小而明确且揭示意图;结构简洁性方面,行为独立变化时优先组合,保持继承浅而诚实,避免强制列车式导航的对象图。

日常规则:偏好揭示意图的名称;保持方法浅显并聚焦单一抽象层级;用提前返回减少分支噪音;保持类内聚而非仅仅小;当身份不重要且语义保证、类型安全或行为值得领域类型时引入值对象;偏好告诉协作者做什么而非询问数据后在他处决策;集合有自身不变式时引入一等集合;值对象应具备语义相等、匹配的哈希行为和深度不可变观察,不依赖对象引用相等或浅层只读;依赖小角色而非易变的具体细节;行为独立变化时优先组合;公共 API 保持小于内部实现细节。

良好信号:类名与其拥有的行为匹配;无效状态被尽早拒绝;多数方法无需阅读无关辅助代码即可理解;调用方依赖的表面积小;同一概念在代码库中命名一致。警告信号:方法需要多条注释才可读;类主要暴露 getter 和 setter;许多调用方重复相同的校验或分支逻辑;一个概念的变化迫使跨许多无关文件修改;对象模型看起来像数据传输而行为被外挂到别处。

参考文档索引:评估接口复杂度、传递层或调用方需跟踪的状态时阅读 references/interface-depth.md;精简编码启发式见 references/core-principles.md;技能背后关键书籍的来源地图见 references/book-influences.md;命名或抽象质量为主要问题时阅读 references/naming-and-abstractions.md;对象协作与角色最重要时阅读 references/message-based-design.md;更丰富的对象选择见 references/advanced-modeling-concepts.md;Fran Iglesias 的实践 OO 启发式见 references/fran-iglesias-practical-guidance.md;SOLID 违规或围绕单一职责、开闭、依赖倒置的设计压力为主要问题时阅读 references/solid-principles.md;对类或方法应用严格 OO 纪律规则时阅读 references/object-calisthenics.md;耦合、依赖方向或协作者注入决策为重点时阅读 references/dependency-management.md;方法长度、抽象层级或意图揭示结构是问题时阅读 references/method-design.md;引入抽象的正确时机不明确或设计过早过度工程时阅读 references/gradual-abstraction.md;语言特定示例文件索引(TypeScript、Java、Python、C#、Ruby、PHP、Go、Rust)见 references/language-examples.md;Go 中的 OOP 概念见 references/go-examples.md;Rust 中的 OOP 概念见 references/rust-examples.md;Kent Beck 简单设计四规则见 references/simple-design-rules.md;跨语言纠正课程见 references/oop-good-practices-examples.md;值对象权威指南见 references/value-objects-advanced.md。

相关技能:对象所有权同时定义一致性、生命周期、仓储或事务边界时使用 ddd-best-practices;值对象契约测试、边界分析、基于属性的测试与确定性夹具使用 tdd-best-practices;高风险或遗留代码修改使用 refactoring-best-practices;主要问题是模式选择时使用 design-patterns-best-practices;设计暴露这些对象的 HTTP API 表面时使用 rest-api-best-practices。

来源影响:该技能综合自 Carlos Blé 的《Sustainable Code》、Kent Beck 的《Implementation Patterns》、Sandi Metz 的《Practical Object-Oriented Design in Ruby》与《99 Bottles of OOP》、Fran Iglesias 的设计原则与良好实践文章及 Object Calisthenics 系列,以及 CodelyTV 的 OOP Good Practices、Aggregates、Value Objects、Four Rules of Simple Design 课程。