进销存 Web 版技术架构选型

技术选型没有银弹,但有明确的约束条件:进销存是重表单、重表格、重交互的业务系统,团队规模小、交付周期紧、需要长期维护。本文按这个约束,把每个技术决策的对比和结论讲清楚,供同类项目参考。

一、整体架构:前后端分离 + 单体后端

第一层决策是架构形态。我们的选择:前端 SPA + 后端单体应用,不做微服务。

  • 前后端分离:前端专注交互,后端专注业务,接口契约用 OpenAPI 固定(见 REST API 设计)。分离让前端能独立 Docker 化部署,也让将来做移动端复用同一套 API。
  • 单体后端:进销存业务模块间耦合紧密——订单影响库存、库存影响成本、成本影响报表,微服务的分布式事务成本远大于收益。单体 + 清晰的模块边界(按业务域分包),两三人的团队维护五年没有问题。真到单实例撑不住那天,按模块拆分也有清晰的刀口。

二、前端选型:Vue3 + Vite + TypeScript

候选 优势 劣势 结论
Vue3 国内人才多、中文资料全、模板语法上手快 大型工程生态弱于 React 选用
React 生态最大、企业级方案成熟 团队学习成本高,表单密集场景样板代码多 备选
传统多页 + jQuery 零构建、兼容老旧环境 复杂交互开发效率低,招不到愿意维护的人 放弃

配套三件套:Vite(秒级热更新、生产构建快)、TypeScript(进销存单据字段几十个,类型安全能在重构时保命)、Pinia(比 Vuex 简单,组合式 API 风格)。UI 组件库选 Element Plus——表格组件是它最强项,而进销存页面一半以上是表格。

三、后端选型:Spring Boot 或 NestJS

两条路线都验证过可行性,按团队背景二选一:

  • Java + Spring Boot:进销存客户多为传统企业,客户侧运维对 Java 接受度最高;事务、并发、生态最成熟。适合有 Java 背景的团队。
  • TypeScript + NestJS:和前端同语言,全栈 TypeScript 类型可共享;单体结构成熟。适合前端起家的团队。

无论哪条,三个技术件不变:数据库迁移工具(结构演进靠它)、统一响应封装和幂等设计(见 API 篇)、以及预聚合报表机制(见 报表可视化)。这些是进销存后端的价值核心,框架只是壳。

四、数据库与缓存

MySQL 8 是默认答案:单机性能足够支撑年单量千万级的进销存,InnoDB 事务可靠,运维人才遍地。除非客户已有 PostgreSQL 运维体系,否则不为小众偏好增加交付风险。

Redis 两个用途:一是会话与 Token 缓存,二是热点数据缓存(商品档案全表就几万条,进程内缓存 + Redis 各存一份,前端查询基本零延迟)。注意 Redis 不参与任何金额计算,账本只信数据库事务。

五、PWA 与离线层的定位

PWA 不是可选项,是 Web 版进销存替代本地软件的关键能力(详见 PWA 离线实践)。但离线层要控制复杂度:只缓存应用外壳和基础档案,单据同步走队列 + UUID 幂等,不做双向实时同步——那是另一个量级的工程。

六、选型清单总结

前端:Vue3 + Vite + TypeScript + Pinia + Element Plus
后端:Spring Boot(或 NestJS)+ MySQL 8 + Redis
部署:Docker Compose(nginx + 后端 + 数据库)
离线:Service Worker + IndexedDB(PWA)
接口:OpenAPI 3 契约 + 统一响应信封 + 幂等键

这套组合没有追新,每一项都在"团队能驾驭"和"生态够成熟"的交集里。选型的本质是在约束条件下做减法——能一个框架解决的,绝不引入第二个。

结语

技术架构选型的验证标准不是发布会上的 benchmark,而是三年后还能不能顺利招到人、顺利发新版、顺利给客户交付。围绕这个目标,本文的组合是稳妥答案;如果你的团队约束不同,决策方法比结论更重要。