记录每一个关键技术选型的「为什么」


ADR-001:选用微信云开发

日期:2025-12-16

背景: 需要为小程序搭建后端服务,支持用户认证、数据存储、文件上传等功能。

选项

  1. 自建服务器 + 数据库
  2. 使用 BaaS(如 LeanCloud)
  3. 微信云开发

决定:选择微信云开发

理由

  • 与微信生态深度整合,获取 openid 零成本
  • 免服务器运维,降低开发门槛
  • 自带鉴权机制,安全性有保障
  • 对于个人项目,免费额度够用

后果

  • 绑定微信生态,难以迁移到其他平台
  • 云函数冷启动可能影响首次响应速度

ADR-002:数据库设计采用文档模型

日期:2025-12-16

背景: 云开发数据库是 MongoDB 风格的文档数据库,需要设计合理的数据结构。

决定:采用嵌套文档 + 引用结合的方式

设计原则

  1. 频繁一起查询的数据放在同一文档
  2. 独立变化的数据使用引用
  3. 避免深层嵌套

示例

  • 订单中嵌入商品快照(下单时的价格)
  • 订单引用用户 ID 和商家 ID

ADR-003:状态管理方案

日期:2025-12-16

背景: 小程序需要在多个页面间共享状态(如购物车、用户信息)。

选项

  1. 全局变量 app.globalData
  2. 状态管理库(如 MobX-miniprogram)
  3. 本地存储 + 事件通信

决定:组合使用 app.globalData + 本地存储

理由

  • 项目规模中等,不需要复杂状态管理
  • 减少引入额外依赖
  • 购物车数据存本地,用户登录后同步到云端

后果

  • 状态管理较分散,需要注意数据一致性
  • 如后续功能复杂度增加,可能需要重构

持续更新中…