SuperAPI AI 工具集

design-patterns-best-practices

编程与开发

查看项目

更新于 10-19 16:15

技能介绍

用途

该技能适用于“主要问题不是单纯代码质量,而是模式选择与模式适配”的场景。用于在以下情形中做决策:选择或评审 GoF 模式、企业应用架构模式、Criteria/查询对象模式或 Clean Architecture 分层结构;比较当前变更压力与直接解决方案,判断是否值得引入新的抽象或接缝。

主要能力

  • 从问题出发选模式:先识别变更压力,而不是先想模式名。压力类型包括构造复杂度、行为变化、状态相关行为、外部集成不匹配、可选的分层行为等。
  • 模式选择工作流:识别压力 → 选择可能的模式族 → 检查适配性(是否消除知识重复、是否使变更局部化、是否比小重构更能改善对象协作、团队是否易读)。若模式比问题更重,则停止。
  • 模式启发式:资料给出了多个模式的使用条件,包括:
    • Strategy:行为按策略或算法变化且应可替换时;
    • State:同一对象随状态迁移改变行为且迁移规则重要时;
    • Factory:创建逻辑复杂、重复或隐藏有意义变化时;
    • Adapter:外部 API 与内部模型不匹配时;
    • Decorator:需要在不改变底层契约的前提下叠加行为时;
    • Composite:叶子与组合对象应响应同一消息时;
    • Observer:一个对象状态变化应触发其他对象反应且来源无需知道监听者时;
    • Command:需要解耦请求发送者与执行者,或请求需排队、记录、撤销时;
    • Template Method:多个类共享算法骨架但具体步骤不同,且骨架不应被子类改变时;
    • Builder:构造复杂对象需要多步骤、可选部分或特定构建顺序时;
    • Proxy:需要替身对象以延迟创建、控制访问或代表远程资源时;
    • Facade:复杂子系统需要为不需要完整细节的调用者提供简化接口时;
    • Repository:希望将业务逻辑与数据访问解耦,并把对象集合当作内存中集合处理时。
  • 警告信号:模式词汇压过领域语言;简单抽取即可同样解决问题;模式制造大量类但耦合依旧;本可用组合隔离变化却用了继承;团队必须先理解模式才能理解业务规则。
  • 规则与边界建议:若主要决策涉及 Aggregate 仓储语义、契约归属,或 Repository 与 DAO/查询服务/网关的取舍,应改用 ddd-best-practices 技能。

使用方式

该技能以文档和参考材料形式提供,没有给出安装命令或运行代码。使用者按需查阅:

  • references/pattern-fit-evidence.md:比较模式与直接方案、判断新接缝是否值得成本;
  • references/pattern-selection-guide.md:模式与问题的映射;
  • references/composition-vs-inheritance.md:组合与继承的结构取舍;
  • references/language-examples.md:TypeScript、Java、Python、C#、Ruby、PHP、Go、Rust 的示例索引;
  • references/go-examples.md:Go 示例(接口实现 Strategy/State、函数式选项作 Builder、channel 作 Observer、(value, error) 作 Result);
  • references/rust-examples.md:Rust 示例(trait 作 Strategy、enum 作 State/Visitor、trait object 做依赖注入、Result<T,E>);
  • references/behavioral-patterns.md:Observer、Command、Template Method、Chain of Responsibility、Iterator、Mediator、Visitor、Memento;
  • references/creational-patterns.md:Builder、Abstract Factory、Factory Method、Singleton、Prototype 的取舍;
  • references/structural-patterns.md:Proxy、Facade、Bridge、Flyweight、Adapter,含 Facade 与 Adapter 的区分;
  • references/enterprise-patterns.md:PoEAA 全部 51 个模式,按 Domain Logic、Data Source、ORM Behavioral/Structural、Web Presentation、Distribution、Concurrency、Session State、Base Patterns 分组;
  • references/patterns-in-practice.md:向模式重构的实践启发式、Observer 经验、Command Bus、Result 模式、DI 容器内部机制;
  • references/implementation-patterns.md:Kent Beck 的微观代码模式(命名、组合方法、守卫子句、值对象、惰性/急切初始化、集合访问器、方法对象);
  • references/clean-architecture.md:Clean Architecture 分层(Entities、Use Cases、Interface Adapters、Frameworks)、依赖规则、Ports & Adapters、Skinny Controllers、SOLID 作为架构支撑;
  • references/criteria-pattern.md:Criteria/查询对象决策、类型化谓词 AST、逻辑字段映射、后端能力、SQL 参数化、连接、分页、边界转换与适配器测试。

适用场景

  • 在引入新模式前评估其是否值得;
  • 在多种候选模式间做选择;
  • 评审已有代码中的模式使用是否合理;
  • 将模式改造应用到有风险的既有代码中(配合 refactoring-best-practices);
  • 在 HTTP API 边界应用 Adapter、DTO、Result、Repository(配合 rest-api-best-practices);
  • 日常代码质量选择(配合 oop-best-practices);
  • Aggregate 仓储契约与持久化边界(配合 ddd-best-practices)。

限制

资料未提供该技能的具体安装方式、运行命令、支持的平台或工具集成形式;未说明收费、价格或效果指标。内容以模式选择的方法论与参考文档为主,不包含可直接执行的代码产物。