1. 项目背景与核心需求
《看潮企业管理软件》是一款面向中小企业的综合管理解决方案,旨在通过数字化手段整合企业运营中的关键业务流程。作为系列开发文档的第三部分,本文将深入剖析该项目的整体架构设计思路与模块划分逻辑。
在项目启动初期,我们团队对目标用户群体(20-200人规模的中小企业)进行了为期两个月的需求调研,发现以下几个核心痛点:
- 各部门数据孤岛现象严重(财务、人事、销售数据无法互通)
- 现有系统扩展性差,无法适应业务快速增长
- 移动办公支持薄弱,外勤人员协作效率低下
基于这些发现,我们确定了三个关键设计原则:
- 模块化架构:支持功能按需组合
- 开放API:便于与现有系统集成
- 响应式设计:全终端适配
2. 技术栈选型分析
2.1 前端架构决策
采用Vue3+TypeScript的组合主要基于以下考量:
- 组合式API更适合复杂业务逻辑的封装
- TypeScript的静态类型检查能减少15-20%的运行时错误
- 实测数据显示,Vue3的打包体积比React小约18%
具体技术矩阵:
bash复制├── 核心框架:Vue3.2
├── 状态管理:Pinia(替代Vuex的轻量方案)
├── UI组件库:Element Plus(表单密集场景优化)
├── 可视化:ECharts 5(中国式报表需求)
└── 构建工具:Vite 3(冷启动速度提升87%)
实践提示:在大型项目中,建议开启Vue的
<script setup>语法糖,能显著提升代码可读性。我们团队通过ESLint配置了自动转换规则。
2.2 后端技术考量
选择NestJS作为后端框架的关键因素:
- 模块化架构与前端设计理念高度契合
- 内置TypeScript支持减少上下文切换成本
- 企业级应用所需的DI、AOP等特性开箱即用
数据库选型对比表:
| 需求维度 | MySQL 8.0 | MongoDB 6.0 | 最终选择 |
|---|---|---|---|
| 事务支持 | ACID完备 | 有限支持 | MySQL |
| 数据结构灵活性 | 固定schema | 动态schema | 混合模式 |
| 地理查询性能 | 一般 | 优秀 | MongoDB |
| 运维成本 | 较低 | 中等 | MySQL |
我们最终采用混合存储方案:核心业务数据用MySQL保证一致性,日志类数据用MongoDB提升写入性能。
3. 项目目录结构详解
3.1 前端工程结构
标准化的目录结构是团队协作的基础,我们的约定如下:
code复制frontend/
├── public/ # 静态资源
├── src/
│ ├── assets/ # 编译资源
│ ├── components/ # 公共组件
│ │ ├── base/ # 基础UI组件
│ │ ├── biz/ # 业务组件
│ │ └── charts/ # 可视化专用
│ ├── composables/ # 组合式函数
│ ├── router/ # 路由配置
│ ├── stores/ # Pinia状态库
│ ├── styles/ # 全局样式
│ ├── utils/ # 工具函数
│ ├── views/ # 页面组件
│ │ ├── dashboard/ # 控制台
│ │ ├── finance/ # 财务模块
│ │ └── ... # 其他模块
│ ├── App.vue # 根组件
│ └── main.ts # 入口文件
├── .env # 环境变量
└── vite.config.ts # 构建配置
关键设计决策:
- 组件分类标准:基础组件(无业务逻辑)与业务组件分离
- 采用Unplugin-auto-import自动导入常用API,减少样板代码
- 路由文件按模块拆分,通过webpack的require.context动态加载
3.2 后端微服务划分
基于领域驱动设计(DDD)原则,我们将系统拆分为六个微服务:
code复制backend/
├── auth-service/ # 认证中心
│ ├── src/
│ │ ├── entities/ # 数据实体
│ │ ├── repositories/ # 数据访问
│ │ ├── services/ # 业务逻辑
│ │ └── controllers/ # API入口
├── finance-service/ # 财务模块
├── hr-service/ # 人事管理
├── crm-service/ # 客户关系
├── inventory-service/ # 库存管理
└── gateway/ # API网关
每个微服务都遵循相同的结构规范:
- 实体类使用TypeORM装饰器定义
- 服务层实现核心业务逻辑
- 控制器处理HTTP请求/响应
- 通过NestJS的Module系统组织依赖
4. 开发环境配置要点
4.1 容器化部署方案
使用Docker Compose实现一键环境启动:
yaml复制version: '3.8'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
volumes:
- ./frontend:/app
- /app/node_modules
api-gateway:
build: ./backend/gateway
ports:
- "4000:4000"
depends_on:
- auth-service
- finance-service
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql-data:/var/lib/mysql
避坑指南:在Windows环境下,需要特别处理文件系统挂载权限问题。建议在WSL2中运行Docker以获得最佳性能。
4.2 代码质量保障体系
我们配置了完整的CI/CD流水线:
- ESLint:Airbnb规则集+自定义规则
- Prettier:统一代码风格
- Husky:Git钩子检查
- Jest:前端单元测试(覆盖率>80%)
- Supertest:API接口测试
关键配置示例(package.json片段):
json复制{
"scripts": {
"prepare": "husky install",
"lint": "eslint --ext .ts,.vue src",
"test:unit": "jest --coverage"
},
"lint-staged": {
"*.{ts,vue}": ["eslint --fix", "prettier --write"]
}
}
5. 典型问题解决方案
5.1 跨模块数据同步
在财务与库存模块联动时,我们采用事件总线模式:
typescript复制// 在库存服务中发布事件
this.eventEmitter.emit('inventory.update', {
productId: 'P10086',
quantity: -5
});
// 在财务服务中订阅
@OnEvent('inventory.update')
handleInventoryChange(payload) {
this.accountingService.recordTransaction(
'STOCK_OUT',
payload.productId,
payload.quantity
);
}
5.2 大数据量性能优化
针对财务报表生成慢的问题,我们实施了三层优化:
- 数据库层:添加复合索引(缩短查询时间约65%)
- 服务层:引入Redis缓存查询结果(TPS提升3倍)
- 前端层:虚拟滚动技术(万级数据渲染无卡顿)
优化前后性能对比:
| 指标 | 优化前 | 优化后 | 提升幅度 |
|---|---|---|---|
| 查询耗时(ms) | 1200 | 380 | 68% |
| 内存占用(MB) | 420 | 210 | 50% |
| 首屏时间(s) | 2.8 | 1.2 | 57% |
6. 架构演进路线
当前系统已支持的功能模块:
- 基础架构(用户/权限/消息)
- 财务核心(总账/应收应付)
- 人事管理(考勤/薪资)
下一步规划中的扩展点:
- 集成企业微信API(预计Q3完成)
- 增加BI数据分析模块(Q4启动)
- 引入工作流引擎(Camunda方案评估中)
在技术债管理方面,我们维护了一个技术决策记录(ADR)文档,记录所有重大架构选择的背景和权衡过程。例如在选择状态管理方案时,详细对比了Pinia与Vuex 4的差异,最终基于性能和维护性选择了前者。