7.7 KiB
复盘文档
元数据
- 需求编号: 2026-01-24-002
- 创建时间: 2026-01-24
- 创建人: SSOT 架构师
- 功能名称: 环境从库初始化
复盘概述
本次复盘总结了环境从库初始化功能的完整开发过程,从需求定义到变更日志的各个阶段,分析了成功经验、改进点和问题,并制定了行动计划,旨在提高后续开发的效率和质量。
成功经验
-
SSOT 流程的严格执行:从需求定义到变更日志的每个阶段都严格按照项目规则执行,确保了所有开发活动都有文档依据,提高了代码的可追溯性和可维护性。每个阶段都创建了相应的文档,包括需求文档、设计文档、决策记录、SQL 脚本、提示词文档、参考代码文档、实施方案文档、会话记录、变更日志等。
-
详细的需求澄清:在阶段 1 通过多轮对话澄清了需求细节,包括功能范围、性能要求、安全要求、数据库命名规则、从库不可修改等,确保了需求理解的准确性。用户提供了清晰的反馈,帮助 AI 准确理解需求。
-
完整的设计文档:在阶段 2 创建了详细的设计文档,包括系统架构、模块架构、数据流、技术选型、数据模型等,为代码生成提供了清晰的指导。设计文档包含了详细的代码示例和数据库表结构设计。
-
合理的架构决策:在阶段 3 通过分析三种技术方案(JDBC + 事务回滚、数据库管理 API、MyBatis Plus 动态数据源),选择了最合适的 JDBC + 事务回滚方案,确保了技术选型的合理性。决策文档详细分析了每种方案的优缺点。
-
准确的代码生成:在阶段 6 根据设计文档和提示词生成了准确的代码,包括 Entity、Controller、Service 接口和实现层的修改。用户反馈主库配置应该从配置文件读取后,立即修改了代码,并新增了 4 个辅助方法来解析 JDBC URL。
-
完整的文档更新:在每个阶段完成后都及时更新了索引和会话记录,确保了文档的完整性和可追溯性。在阶段 8 成功创建了变更日志,并更新了根目录 CHANGELOG.md 和索引。
改进点
-
阶段间的过渡可以更流畅:在阶段转换时,可以更主动地向用户解释下一阶段的目的和流程,提高用户的理解和参与度。例如,在进入阶段 6 之前,可以简要说明代码生成的目的和预期产出。
-
代码生成前的验证可以更严格:在生成代码前,可以增加对设计文档和决策记录的再次验证,确保代码生成的准确性。例如,可以检查设计文档中的接口定义是否与需求文档中的功能需求一致。
-
API 文档的自动生成可以考虑:可以探索使用 Swagger 等工具自动生成 API 文档,提高文档的准确性和维护性。当前是手动创建 API 文档,可以考虑集成 Swagger 注解,自动生成 API 文档。
问题分析
-
问题 1:在阶段 6 生成代码时,用户反馈主库配置应该从配置文件读取,而不是从数据库表中读取
- 根因:初始设计时没有明确主库配置的来源,默认从数据库表中读取 MASTER 数据源配置
- 解决方案:立即修改代码,从 application-druid.yml 配置文件中读取主库配置,并新增了 4 个辅助方法(extractDbNameFromUrl、extractHostFromUrl、extractPortFromUrl、extractDbTypeFromUrl)来解析 JDBC URL
- 经验教训:在需求澄清阶段应该更明确地询问配置来源,避免后续需要修改代码
-
问题 2:在代码生成过程中,没有使用代码生成器
- 根因:本需求不涉及数据库表新增,仅修改现有表结构,因此无需使用代码生成器
- 解决方案:手动实现所有代码,确保了代码的正确性和规范性
- 经验教训:在需求澄清阶段应该明确是否涉及数据库表新增,以确定是否需要使用代码生成器
行动计划
- 针对改进点 1:在阶段转换时,增加对下一阶段的目的和流程的解释,责任:AI Assistant,时间:立即执行
- 针对改进点 2:在生成代码前,增加对设计文档和决策记录的再次验证,责任:AI Assistant,时间:立即执行
- 针对改进点 3:探索使用 Swagger 等工具自动生成 API 文档,责任:项目团队,时间:下一个迭代
- 针对问题 1:在后续的需求澄清中,更明确地询问配置来源,责任:AI Assistant,时间:立即执行
- 针对问题 2:在需求澄清阶段明确是否涉及数据库表新增,以确定是否需要使用代码生成器,责任:AI Assistant,时间:立即执行
提取模式
有效的 Prompt 技巧
- 具体的输出格式要求:在提示词中明确指定需要生成的文件、路径、格式等,可以提高生成代码的准确性和规范性。
- 引用真源:在提示词开头引用需求文档和设计文档的链接,可以确保生成的代码符合需求和设计要求。
- 详细的代码规范要求:在提示词中明确指定代码规范、命名规范、注释规范等,可以提高生成代码的质量和可读性。
避免的坑
- 不要使用模糊的描述:在提示词中使用模糊的描述(如"请生成高质量的代码"),会导致生成的代码不符合预期。
- 不要忽略测试要求:在提示词中忽略测试要求,会导致生成的代码缺少单元测试,降低代码的质量和可靠性。
- 不要违反项目规则:在代码生成过程中违反项目规则(如不遵循若依框架规范),会导致生成的代码不符合项目要求,需要重新生成。
模板迭代
经过本次复盘,发现当前使用的模板都适用,无需进行模板迭代。
目标与实际产出对比
目标
- 为环境配置自动创建对应的从库数据源
- 支持手动初始化环境对应的从库
- 从库配置信息自动写入 sys_datasource_config 表
- DataiConfigEnvironment 表新增 datasourceId 字段关联数据源配置
- 从库初始化后自动切换并验证连接有效性
- 从库一经创建不允许修改和删除
实际产出
- ✅ 实现了环境从库初始化功能,包括数据库创建、配置写入、数据源注册、连接验证等步骤
- ✅ 在 DataiConfigEnvironmentController 中新增了 initSlaveDatasource 接口方法
- ✅ 在 ISysDatasourceConfigService 接口中新增了 createSlaveDatabase 方法
- ✅ 在 DataiConfigEnvironment 实体类中新增了 datasourceId 字段
- ✅ 在 datai_config_environment 表中新增了 datasource_id 字段并添加了索引
- ✅ 从库初始化后自动切换并验证连接有效性
- ✅ 从库一经创建不允许修改和删除(通过检查 datasourceId 字段是否为空)
- ✅ 主库配置从 application-druid.yml 配置文件中读取
- ✅ 新增了 4 个辅助方法来解析 JDBC URL
结论
所有目标都已实现,实际产出符合预期。