4.6 KiB
4.6 KiB
技术决策日志
记录项目中的重要技术决策、原因和影响。
2025-01-12
决策 #001: 项目架构选择
决策: 采用四层架构设计(DLL Hook → WechatHook → Bot Core → Plugin)
原因:
- 清晰的职责分离
- 便于维护和扩展
- 最大化复用 XYBotV2 代码
影响:
- 代码结构清晰
- 80% 代码可复用
- 学习成本低
状态: ✅ 已实施
决策 #002: DLL 文件存放位置
决策: DLL 文件放在项目的 libs/ 目录,不放到微信安装目录
原因:
- Loader.dll 由 Python 程序直接加载
- Helper.dll 由 Loader.dll 动态注入到微信进程
- 不需要修改微信安装目录
影响:
- 部署更简单
- 不污染微信目录
- 便于版本管理
状态: ✅ 已实施
决策 #003: 不进行本地测试
决策: 所有测试在远程设备进行,开发过程中不在本地运行
原因:
- 用户要求
- 避免本地环境污染
- 专注于代码实现
影响:
- 需要更仔细的代码审查
- 依赖用户反馈进行调试
- 开发周期可能稍长
状态: ✅ 已实施
决策 #004: 复用 XYBotV2 插件系统
决策: 完全复用 XYBotV2 的插件系统(PluginBase、EventManager、装饰器)
原因:
- 插件系统设计优秀
- 已经过验证
- 减少开发工作量
- 保持插件兼容性
影响:
- 开发速度快
- XYBot 插件可直接使用
- 代码质量有保证
状态: ✅ 已确定,待实施
决策 #005: 使用 Memory Bank 系统
决策: 创建 Memory Bank 文件夹,实时跟踪项目进度和决策
原因:
- 用户要求
- 便于项目管理
- 保持开发上下文
- 方便后续维护
影响:
- 项目管理更规范
- 决策过程可追溯
- 便于团队协作
文件结构:
- projectBrief.md - 项目简介
- activeContext.md - 当前上下文
- progress.md - 进度跟踪
- decisionLog.md - 决策日志
- systemPatterns.md - 系统模式
状态: ✅ 已实施
决策 #006: 消息类型映射策略
决策: 创建独立的 message_types.py 文件,定义 API type 到内部 event 的映射
原因:
- 解耦消息类型定义
- 便于维护和扩展
- 统一消息格式转换
实现方式:
MESSAGE_TYPE_MAP = {
10001: "text_message",
10002: "image_message",
# ...
}
影响:
- 代码更清晰
- 易于添加新消息类型
- 便于调试
状态: ✅ 已确定,待实施
决策 #007: 回调处理机制
决策: 使用装饰器模式实现回调处理(@CONNECT_CALLBACK, @RECV_CALLBACK, @CLOSE_CALLBACK)
原因:
- 参考 python_demo.py 的实现
- 代码简洁优雅
- 易于扩展
影响:
- 回调注册简单
- 支持多个回调处理器
- 代码可读性好
状态: ✅ 已确定,待实施
决策 #008: 异步编程模型
决策: 使用 asyncio 作为异步编程框架,所有 API 都是异步函数
原因:
- 与 XYBotV2 保持一致
- 提高并发性能
- 插件系统要求
影响:
- 所有函数必须使用 async/await
- 需要处理同步/异步转换
- 性能更好
状态: ✅ 已确定,待实施
决策 #009: 配置文件格式
决策: 使用 TOML 格式作为配置文件格式
原因:
- 与 XYBotV2 保持一致
- 可读性好
- Python 3.11+ 原生支持
影响:
- 配置文件易于编辑
- 支持注释
- 类型安全
状态: ✅ 已实施
决策 #010: 数据库选择
决策: 使用 SQLite + aiosqlite 作为数据库
原因:
- 与 XYBotV2 保持一致
- 无需额外服务
- 支持异步操作
影响:
- 部署简单
- 性能足够
- 便于备份
状态: ✅ 已确定,待实施
待决策事项
待决策 #001: 消息类型 type 值
问题: 个微 API 各类消息的具体 type 值未知
选项:
- 参考 API 文档推测
- 实际测试获取
倾向: 选项 2 - 实际测试获取
需要: 用户提供实际消息的 type 值
待决策 #002: WebUI 是否实现
问题: 是否需要实现 Web 管理界面
选项:
- 立即实现
- 基础功能完成后再实现
- 不实现
倾向: 选项 2 - 基础功能完成后再实现
原因: 先保证核心功能稳定
决策模板
### 决策 #XXX: 决策标题
**决策:** 简要描述决策内容
**原因:**
- 原因1
- 原因2
**影响:**
- 影响1
- 影响2
**状态:** ✅ 已实施 / 🚧 进行中 / ⏳ 待实施 / ❌ 已废弃