Files
Smart-Farm/doc/architecture-analysis.md
2025-12-25 11:06:35 +08:00

190 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 智慧农场项目 架构与技术评估报告
> 日期2025-12-24
## 概览
- 后端:`ThinkPHP 6` 多应用架构(模块:`farm``shop``admin``im``member`REST 风格 API含 WebSocket 能力Swoole、Workerman
- 前端:
- 管理后台:`Vue 2.x + element-ui + webpack 3`,位于 `uniapp/uni-admin``web` 两套工程。
- 业务端:`uni-app` 多端 (`H5/小程序/App`),位于 `uniapp/uni-app`
- 小程序编译产物:`front`(微信小程序)目录。
- 数据层MySQL直连配置Redis`predis`),缓存使用 ThinkPHP Cache。
- 运维:日志 `File + SocketLog`WebSocket 配置与 Worker 配置存在;未检测到标准 CI/CD 流程配置文件。
## 架构图
```mermaid
flowchart LR
subgraph Client
A1[uni-app 客户端]\n(uniapp/uni-app)
A2[微信小程序]\n(front)
A3[管理后台 Vue2]\n(uniapp/uni-admin / web)
end
A1 -->|HTTP/JSON| B[ThinkPHP 6 多应用 API]
A2 -->|HTTP/JSON| B
A3 -->|HTTP/JSON| B
subgraph Server
B --- C[(MySQL)]
B --- D[(Redis/Cache)]
B --- E[[WebSocket 服务]]
end
E -. SocketIO/Swoole/Workerman .- A1
E -. 推送/订阅 .- A3
```
## 架构模式分析
- 模式:
- MVC控制器 + 模型清晰分层,例如 `app/farm/controller/Index.php:37``app/farm/model/*`
- 多应用(模块化单体):通过 `think-multi-app` 将不同业务域拆分为 `farm/shop/admin/im/member` 等模块(`config/app.php:44``app/*/route/route.php`)。
- 事件驱动/实时:引入 `Swoole``Workerman` 提供 WebSocket 推送(`config/swoole.php:29``config/gateway_worker.php:16`)。
- 优点:
- 模块清晰、域边界明确;路由分组利于权限与网关层控制(`app/farm/route/route.php:6`)。
- REST 输出统一封装,成功/错误结构一致(`app/ApiRest.php:241``app/ApiRest.php:256`)。
- 实时能力可用于监控/消息等场景(`config/swoole.php:29-43`)。
- 缺点:
- 配置管理分散且存在硬编码数据库、CORS环境隔离不足`config/database.php:19-27``public/index.php:17-19`)。
- 前端存在多套实现(`uniapp/uni-admin``web`),技术版本老旧、维护成本偏高(`web/package.json:47`)。
- WebSocket 路由文件声明与实际代码不一致,存在可维护性风险(`config/swoole.php:33` 指向 `im/controller/websocket.php`,但未找到该文件)。
- 评估:
- 可扩展性:中等偏上。模块化良好,但需统一配置与网关;前端多仓不利扩展。
- 可维护性:中等。后端规范可读,但安全/配置问题需治理;前端需升级统一。
- 性能中等。Swoole/Worker 可提升实时性能;数据库访问与缓存策略需细化优化。
## 技术栈分析
- 后端:
- `PHP >=7.1``composer.json:19``ThinkPHP 6.0.*-dev``composer.json:20`)。
- 组件:`topthink/think-view`(模板)、`topthink/think-multi-app`(多应用)、`topthink/think-swoole`WebSocket`predis/predis`Redis`guzzlehttp/guzzle`HTTP`composer.json:21-28`)。
- 引导入口与路由:`public/index.php:14-31``route/app.php:12-14`、各模块 `app/*/route/route.php`
- 前端:
- 管理后台 A`uniapp/uni-admin` 使用 `Vue 2.5.2``element-ui 2.10.1``webpack 3.x``uniapp/uni-admin/package.json:1-50``uniapp/uni-admin/config/index.js:51`)。
- 管理后台 B`web` 使用 `Vue 2 + webpack 3``web/package.json:47-80`)。
- 业务端:`uniapp/uni-app``pages.json:631-656`),依赖 `ezuikit-js``jweixin-module``vue-lazyload``uniapp/uni-app/package.json:1-26`)。
- 小程序编译产物:`front/app.json:1-207`、多页面与组件定义。
- 数据库/缓存:
- MySQL 直连,表前缀 `ims_``config/database.php:26-55`)。
- Redis`predis`,结合自定义 Cache Key 方案(`app/common.php:114-205`)。
- WebSocket
- `Swoole` 配置(`config/swoole.php:7-54``Workerman` 配置(`config/gateway_worker.php:16-43``config/worker_server.php:17-55`)。
### 技术选型合理性
- 后端选型ThinkPHP 6 性能与学习曲线较友好,国内社群活跃;结合 Swoole 能应对实时业务需求。建议升级到稳定版,并完善 `.env` 与容器化。
- 前端选型Vue 2 + webpack 3 已老旧,维护风险增加。建议统一到 `Vue 3 + Vite`uni-app可继续但注意版本升级与模块整合。
- 数据层:直连配置与硬编码需治理;建议引入连接池配置、只读副本与慢查询监控。
### 技术栈评估矩阵
| 层 | 当前技术 | 成熟度 | 社区支持 | 性能 | 维护性 | 长期性 |
|---|---|---|---|---|---|---|
| 后端框架 | ThinkPHP 6 | 高 | 中高 | 中高 | 中 | 中高 |
| 实时服务 | Swoole/Workerman | 高 | 高 | 高 | 中 | 高 |
| 管理后台 | Vue 2 + webpack 3 | 高(历史) | 高(下降) | 中 | 低 | 低 |
| 业务端 | uni-app | 中高 | 高 | 中 | 中 | 中高 |
| 数据库 | MySQL | 高 | 高 | 高 | 中 | 高 |
| 缓存 | Redis (predis) | 高 | 高 | 高 | 高 | 高 |
## 目录结构分析
- 根目录关键结构摘要:
```
app/
admin|farm|im|shop|member|... # 多应用模块(控制器、模型、路由、语言包等)
config/ # 全局配置app、database、log、swoole、worker 等)
public/ # 前端入口与重写、静态资源(含 UEditor
uniapp/uni-admin # Vue2 管理后台工程
uniapp/uni-app # uni-app 多端工程
web/ # 另一套 Vue2 管理后台工程
front/ # 微信小程序编译产物
extend/ # 第三方库PHPExcel、alipay、phpqrcode 等)
```
- 模块划分:
- 按业务域划分(`farm``shop``im` 等),路由组定义清晰(如 `app/farm/route/route.php:6`)。
- 公共能力与工具聚合在 `app/common.php``app/Common/*``extend/`
- 组织合理性:
- 多应用模块边界明确,利于团队分工与权限隔离。
- 公共方法集中但较大,建议拆分更细粒度的服务/工具类,增强可测试性与复用性。
- 前端多套管理后台导致重复建设与维护成本高。
## 其他分析项
### 安全性设计评估
- 数据库凭据硬编码,且存在外网地址与弱保护(`config/database.php:19-27`)。
- CORS 允许所有来源与多头部,需谨慎(`public/index.php:17-19`)。
- 文件上传UEditor存在在 `public/static/Ueditor/php/controller.php:1-59`,需增加鉴权、白名单与病毒/脚本扫描。
- 建议:
- 引入 `.env`dotenv管理密钥与环境CI 注入配置,严禁将密钥入库。
- 收敛 CORS 到受信域名;为管理端与 API 区分域名与策略。
- 上传增加鉴权、MIME 校验、大小与类型限制、存储隔离OSS/CDN并启用杀毒与内容安全。
- 审计 SocketLog 配置的 `host/client_ids` 安全性(`config/log.php:45-52`)。
### 异常处理机制分析
- 全局异常处理使用默认 `ExceptionHandle``app/ExceptionHandle.php:26-68`),忽略常见业务异常类别。
- API 错误输出统一封装(`app/ApiRest.php:256-270``app/ApiRest.php:550-572`)。
- 建议:
- 明确统一错误码表与错误分类;区分 4xx/5xx 并记录结构化日志。
- 在控制器入参处引入统一校验器(`Validate`),并在异常中补充 traceId 与请求上下文。
### 日志与监控系统设计
- 日志:默认文件日志 + `SocketLog` 推送(`config/log.php:18-53`)。
- 监控:未检测到 APM/指标监控WebSocket/Worker 仅基础配置。
- 建议:
- 引入结构化日志JSON与日志聚合ELK/OpenSearch
- 指标监控Prometheus + Grafana与应用探针Swoole 环境适配)。
- 慢查询与缓存命中率监控WebSocket 连接与消息指标暴露。
### CI/CD 流程评估
- 未检测到 `GitHub Actions/.github/workflows``gitlab-ci.yml``Jenkinsfile`
- 建议:
- 后端:`composer install --no-dev`、静态分析(`phpstan`)、规范(`php-cs-fixer`)、单测(`phpunit`、容器镜像构建Docker
- 前端:`node >= 16``pnpm`/`npm ci``vite/webpack` 构建与产出归档;多端产物分环境发布。
- 部署灰度与回滚策略、配置注入K8s/Helm 或容器编排)。
## 证据与代码定位
- 框架与依赖:`composer.json:19-28`
- 入口与 CORS`public/index.php:14-19`
- 路由(示例):`app/farm/route/route.php:6-22``route/app.php:12-14`
- 控制器示例:`app/farm/controller/Index.php:37-60`
- 统一响应:`app/ApiRest.php:241-253`、错误:`app/ApiRest.php:256-270`
- 异常处理:`app/ExceptionHandle.php:26-68`
- 数据库配置:`config/database.php:19-27`、连接:`config/database.php:34-55`
- 日志:`config/log.php:18-53`
- WebSocket`config/swoole.php:29-43``config/gateway_worker.php:16-43`
- UEditor 上传:`public/static/Ueditor/php/controller.php:1-59``public/static/Ueditor/php/config.json:44-64`
## 目录结构优化建议
- 后端:
- 拆分 `app/common.php` 的通用函数为独立服务/工具类,按领域与职责进行分包(`app/Common/*``extend/*` 对齐)。
- 引入 `.env` 与配置中心;移除硬编码,统一 `config/*` 读取策略。
- 校验器、DTO 与错误码统一;中间件化鉴权与限流。
- 前端:
- 将双管理后台整合为单一工程(优先 `Vue 3 + Vite`);组件与样式库升级替换。
- 对 uni-app 组件库与页面进行模块化与代码规范统一。
- 数据与实时:
- 补齐 Swoole 路由文件与事件处理;统一 WebSocket 协议与命名。
- 数据库加入读写分离、连接池与慢查询治理;缓存策略梳理(穿透/击穿/雪崩)。
## 潜在风险与改进清单
- 风险:
- 凭据硬编码、CORS 过宽、上传安全不足、WebSocket 文件缺失。
- 前端技术栈老旧且重复实现,增加维护成本与安全风险。
- 改进:
- `.env` 与密钥治理、CORS 收敛、上传安全增强(签名、鉴权、扫描)。
- 前端统一升级;构建链与依赖版本治理。
- 引入 CI/CD 与质量门禁lint、测试、静态分析容器化与可观测性。
---
## 附:核心代码片段引用
- `composer.json:19-28`
- `public/index.php:14-19`
- `route/app.php:12-14`
- `app/farm/route/route.php:6-24`
- `app/farm/controller/Index.php:37-75`
- `app/ApiRest.php:241-253``256-270``550-572`
- `app/ExceptionHandle.php:26-68`
- `config/database.php:19-27``34-55`
- `config/log.php:18-53`
- `config/swoole.php:29-43`
- `config/gateway_worker.php:16-43`
- `public/static/Ueditor/php/controller.php:1-59`
- `public/static/Ueditor/php/config.json:44-64`