记录每一个关键技术选型的「为什么」
ADR-001:选用微信云开发
日期:2025-12-16
背景: 需要为小程序搭建后端服务,支持用户认证、数据存储、文件上传等功能。
选项:
- 自建服务器 + 数据库
- 使用 BaaS(如 LeanCloud)
- 微信云开发
决定:选择微信云开发
理由:
- 与微信生态深度整合,获取 openid 零成本
- 免服务器运维,降低开发门槛
- 自带鉴权机制,安全性有保障
- 对于个人项目,免费额度够用
后果:
- 绑定微信生态,难以迁移到其他平台
- 云函数冷启动可能影响首次响应速度
ADR-002:数据库设计采用文档模型
日期:2025-12-16
背景: 云开发数据库是 MongoDB 风格的文档数据库,需要设计合理的数据结构。
决定:采用嵌套文档 + 引用结合的方式
设计原则:
- 频繁一起查询的数据放在同一文档
- 独立变化的数据使用引用
- 避免深层嵌套
示例:
- 订单中嵌入商品快照(下单时的价格)
- 订单引用用户 ID 和商家 ID
ADR-003:状态管理方案
日期:2025-12-16
背景: 小程序需要在多个页面间共享状态(如购物车、用户信息)。
选项:
- 全局变量
app.globalData - 状态管理库(如 MobX-miniprogram)
- 本地存储 + 事件通信
决定:组合使用 app.globalData + 本地存储
理由:
- 项目规模中等,不需要复杂状态管理
- 减少引入额外依赖
- 购物车数据存本地,用户登录后同步到云端
后果:
- 状态管理较分散,需要注意数据一致性
- 如后续功能复杂度增加,可能需要重构
持续更新中…