11 KiB
11 KiB
智慧农场项目 架构与技术评估报告
日期: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 流程配置文件。
架构图
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)。
- MVC:控制器 + 模型清晰分层,例如
- 优点:
- 模块清晰、域边界明确;路由分组利于权限与网关层控制(
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,但未找到该文件)。
- 配置管理分散且存在硬编码(数据库、CORS),环境隔离不足(
- 评估:
- 可扩展性:中等偏上。模块化良好,但需统一配置与网关;前端多仓不利扩展。
- 可维护性:中等。后端规范可读,但安全/配置问题需治理;前端需升级统一。
- 性能:中等。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、多页面与组件定义。
- 管理后台 A:
- 数据库/缓存:
- MySQL 直连,表前缀
ims_(config/database.php:26-55)。 - Redis:
predis,结合自定义 Cache Key 方案(app/common.php:114-205)。
- MySQL 直连,表前缀
- 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-28public/index.php:14-19route/app.php:12-14app/farm/route/route.php:6-24app/farm/controller/Index.php:37-75app/ApiRest.php:241-253、256-270、550-572app/ExceptionHandle.php:26-68config/database.php:19-27、34-55config/log.php:18-53config/swoole.php:29-43config/gateway_worker.php:16-43public/static/Ueditor/php/controller.php:1-59public/static/Ueditor/php/config.json:44-64