--- name: implementation-approach description: 选择实现策略(垂直切片、水平切片或混合方案)并进行风险评估。在规划功能实现时使用。 --- # 实现策略选择框架(元认知方法) ## 元认知策略选择流程 ### 阶段 1:决策充分的现状分析 **核心问题**:“现有实现是什么样的?” #### 分析框架 ```yaml 架构分析: 职责划分、数据流、依赖关系、技术债务 实现质量评估: 代码质量、测试覆盖率、性能、安全性 历史背景理解: 现有形态的合理性、过去决策的有效性、约束变化、需求演变 ``` #### 元认知问题清单 - 该实现的真正职责是什么? - 哪些部分是业务本质,哪些源于技术约束? - 从代码中看不出哪些依赖关系或隐含前提? - 当前设计带来了哪些收益和约束? 当另一项现状事实无法改变职责、复用方式、方案有效性、总体复杂度、契约或验证结果时,停止分析。 **完成依据**:已检查的路径、观察到的架构/数据流事实、已知约束、标注为推断的历史合理性推断,以及可能改变策略选择的未知项。 **转换条件**:当每一项与策略相关的论断都已被观察到、附带证据明确推断,或记录为未知项时,进入下一阶段。 ### 阶段 2:设计收敛 **核心问题**:“能交付当前所需结果的最小设计是什么?每一项超出该设计的追加内容,各由什么依据支撑?” 在探索实现策略之前,按顺序完成以下步骤: 1. **现有职责基线**:通过现有职责,构建能交付当前结果的最简端到端路径。明确的需求和已接受的决策具有约束力;建议性的机制仍属候选项。 2. **依据核验**:用当前需求、已验证的约束、观察到的范围内问题以及有依据支撑的重大风险来检验该路径。只保留那些可能改变已选定设计的未满足条件。 3. **有针对性的比较**:针对每一项未满足条件,在增加设计增量之前,先测试复用、从现有数据派生、按需计算,或由当前调用方或边界承担职责等方案。按在用户决策、设置、模式、概念、输出、持久状态、实现路径、用户体验、运行时、实现、测试、文档和维护等存在实质差异的维度,比较各可行方案的总体复杂度。选择满足该条件且总体复杂度最低的方案。 4. **削减检验**:移除每一项提议的追加内容,并重新检验其所对应的条件。仅当被确认的结果、必要边界或必要证明因此无法满足时,才保留该追加内容。 候选路径和被否决的追加内容仍属于当前分析。需长期保留的输出是**已选定设计**:完整的选定路径,加上每项设计增量的依据,以及移除该项后会失效的条件。只有已接受的 ADR 可以将备选方案作为决策历史保留。实现时使用同样的收敛检验方式,无需产出单独的产物。 **完成依据**:一份完整的已选定设计;每项设计增量均说明其当前依据、设计增量更小的方案为何不足,以及削减检验的结果。 **转换条件**:当每一项支撑性论断都已被观察到、附带证据明确推断,或记录为未知项时,进入下一阶段;将阻塞下一步的未知项转化为继续所需的具体、可验证依据要求。仅当未知项要求变更已确认的成果、目标状态需求或非目标,或需要不可逆操作授权时,才与用户交互。 ### 阶段 3:策略探索与创建 **核心问题**:“在确定 before -> after 时,应参考哪些实现模式或策略?” #### 策略发现流程 ```yaml 调研与探索: 优先参考仓库中的既有模式;其次是与已解析依赖版本匹配的官方文档;再次是维护良好的开源实现;文献/博客仅用作补充性备选方案,并标注为非权威来源 创造性思考: 策略组合、基于约束的设计、阶段划分、扩展点设计 ``` #### 参考策略模式(鼓励创造性组合) **遗留系统处理策略**: - Strangler 模式:通过分阶段替换实现渐进式迁移 - Facade 模式:通过统一接口隐藏复杂性 - Adapter 模式:与现有系统之间的桥接 **新开发策略**: - 功能驱动开发:优先交付用户价值的垂直实现 - 基础驱动开发:优先保证稳定性的自底向上构建 - 风险驱动开发:优先处理风险最大的要素 **集成/迁移策略**: - Proxy 模式:透明的功能扩展 - Decorator 模式:对现有功能的分阶段增强 - Bridge 模式:通过抽象获得灵活性 **完成依据**:当决策并非显而易见时,至少提出两个可行的候选方案,每个候选方案都需对应到其所满足的观察到的约束,以及未解决的约束。 **转换条件**:当各候选方案都针对同一约束集合具备可比性时,进入下一阶段。 ### 阶段 4:风险评估与控制 **核心问题**:“将其应用于现有实现会产生哪些风险?哪种控制措施能在保留验证与回滚能力的同时,可衡量地降低发生概率或影响程度?” #### 风险分析矩阵 ```yaml 技术风险: 系统影响、数据一致性、性能下降、集成复杂度 运营风险: 服务可用性、部署停机、流程变更、回滚流程 项目风险: 进度延迟、学习成本、质量达成度、团队协作 ``` #### 风险控制策略 ```yaml 预防措施: 分阶段迁移、并行运行验证、集成/回归测试、监控设置 事件响应: 回滚流程、日志/指标准备、沟通机制、服务持续运行流程 ``` **完成依据**:每项重大风险都具备发生概率/影响程度的依据、一项预防或遏制控制措施,以及一个验证点。 **转换条件**:当每项高影响风险都已有控制措施或阻塞性上报时,进入下一阶段。 ### 阶段 5:约束兼容性验证 **核心问题**:“该项目的约束条件是什么?” #### 约束清单 ```yaml 技术约束: 库兼容性、资源容量、强制性要求、数值目标 时间约束: 截止日期/优先级、依赖关系、里程碑、学习周期 资源约束: 团队/技能、工时/系统、预算、外部合约 业务约束: 上市时机、客户影响、法规合规 ``` **完成依据**:每项约束都已被观察到、推断出,或标记为未知;每一项可能使某候选方案失效的未知项,都需明确指出继续所需的具体、可验证依据。 **转换条件**:当剩余的未知项不会改变有效候选方案集合,或由用户予以解决时,进入下一阶段。 ### 阶段 6:实现方案决策 在满足所有硬性约束和当前需求的前提下,选择过渡风险最低、验证延迟最小的方案。仅在需求覆盖度、兼容性和风险控制三者相当时,才将生命周期成本和实现工作量用作决胜因素。 #### 垂直切片(功能驱动) **特征**:按功能单元跨所有层进行垂直实现 **适用条件**:功能间依赖度低、输出为用户可用形式、需要跨所有架构层进行变更 **验证方式**:每个功能完成时交付终端用户价值 #### 水平切片(基础驱动) **特征**:按架构层分阶段构建 **适用条件**:基础系统稳定性重要、多个功能依赖共同基础、逐层验证有效 **验证方式**:所有基础层完成后进行集成运行验证 #### 混合方案(创造性组合) **特征**:根据项目特点灵活组合 **适用条件**:需求不明确、需要按阶段变更方案、从原型验证过渡到完整实现 **验证方式**:当该阶段产出终端用户可操作的行为时分配 L1;当该阶段产出可测试的内部行为或契约时分配 L2;仅当该阶段产出构建期结构、尚无可运行行为时才分配 L3 对于混合方案,为每个阶段分配一个明确的 L1/L2/L3 验证等级和可观测的完成结果。 **完成依据**:一个已选定的方案,其阶段边界、集成点,以及每个阶段的验证结果。 **转换条件**:当所选方案覆盖全部硬性约束、其风险均已配备控制措施时,进入文档记录阶段。否则返回候选探索(阶段 3);若阶段 4-5 的结果改变了已选定设计或其依据,则返回设计收敛(阶段 2)。 ### 阶段 7:决策依据文档化 在设计文档或规划交接文档中返回以下结构: ```yaml implementationApproachDecision: observedConstraints: [<约束 + 依据>] inferredConstraints: [<约束 + 依据与推断>] unknowns: [<未知项 + 所需依据或决策>] selectedApproach: selectionRationale: <硬性约束覆盖度、兼容性、风险控制及总体复杂度依据> addedDesignSurface: [<设计增量 + 当前依据 + 设计增量更小的方案为何不足 + 削减检验结果>] phaseVerification: [<阶段 + L1/L2/L3 + 可观测的完成依据>] ``` 候选方案及否决理由仍属于当前分析,除非已被接受的 ADR 将其作为决策历史予以保留。 **完成依据**:所选方案及每项设计增量,均可追溯至一项观察到的约束、已接受的推断,或已解决的价值边界决策。 ## 验证等级定义 各任务完成验证的优先级: - **L1:功能运行验证** - 作为终端用户功能可运行(例如:用户可以执行搜索并获得结果) - **L2:测试运行验证** - 已新增测试并通过(例如:类型定义测试) - **L3:构建成功验证** - 无编译错误(例如:接口定义) **优先级**:按可验证性重要程度排序,L1 > L2 > L3 ## 集成点定义 根据所选策略定义集成点: - **基于 Strangler**:每个功能在新旧系统之间切换时 - **功能驱动**:用户实际可以使用该功能时 - **基础驱动**:所有架构层就绪且 E2E 测试通过时 - **混合方案**:每个阶段所定义的独立目标达成时 ## 决策检查清单 - [ ] 在策略选择之前存在阶段 1 的依据 - [ ] 阶段 2 产出一份完整的已选定设计,且每项设计增量都对应到当前依据、设计增量更小的方案为何不足,以及削减检验下失效的条件 - [ ] 当所列策略均无法满足全部硬性约束时,候选方案生成包含组合方案 - [ ] 每项重大风险都配有控制措施和验证点 - [ ] 每项硬性约束都对应到所选方案 - [ ] 阶段 7 的输出记录了选择结果、总体复杂度依据及设计增量;备选方案仅出现在已被接受的 ADR 中 当某个已勾选项所需的依据未知时,在该阶段停止,并明确指出继续所需的具体、可验证仓库依据要求。仅当未知项要求变更已确认的成果、目标状态需求或非目标,或需要不可逆操作授权时,才与用户交互。 ## 元认知执行指南 1. **善用已知模式**:将其作为起点,探索创造性组合 2. **依据优先级排序的调研**:依次使用仓库依据、与版本匹配的官方文档、维护良好的开源示例,最后是补充性的次要来源 3. **运用 5 个为什么**:追溯根本原因以把握本质 4. **多视角评估**:完成阶段 1-5 的依据核验与转换检验 5. **策略组合**:当单一策略无法满足全部硬性约束时,组合多种策略 6. **决策可追溯性**:将每个选择理由都映射到阶段 7 输出中的依据