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

11 KiB
Raw Blame History

智慧农场项目 架构与技术评估报告

日期2025-12-24

概览

  • 后端:ThinkPHP 6 多应用架构(模块:farmshopadminimmemberREST 风格 API含 WebSocket 能力Swoole、Workerman
  • 前端:
    • 管理后台:Vue 2.x + element-ui + webpack 3,位于 uniapp/uni-adminweb 两套工程。
    • 业务端:uni-app 多端 (H5/小程序/App),位于 uniapp/uni-app
    • 小程序编译产物:front(微信小程序)目录。
  • 数据层MySQL直连配置Redispredis),缓存使用 ThinkPHP Cache。
  • 运维:日志 File + SocketLogWebSocket 配置与 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:37app/farm/model/*
    • 多应用(模块化单体):通过 think-multi-app 将不同业务域拆分为 farm/shop/admin/im/member 等模块(config/app.php:44app/*/route/route.php)。
    • 事件驱动/实时:引入 SwooleWorkerman 提供 WebSocket 推送(config/swoole.php:29config/gateway_worker.php:16)。
  • 优点:
    • 模块清晰、域边界明确;路由分组利于权限与网关层控制(app/farm/route/route.php:6)。
    • REST 输出统一封装,成功/错误结构一致(app/ApiRest.php:241app/ApiRest.php:256)。
    • 实时能力可用于监控/消息等场景(config/swoole.php:29-43)。
  • 缺点:
    • 配置管理分散且存在硬编码数据库、CORS环境隔离不足config/database.php:19-27public/index.php:17-19)。
    • 前端存在多套实现(uniapp/uni-adminweb),技术版本老旧、维护成本偏高(web/package.json:47)。
    • WebSocket 路由文件声明与实际代码不一致,存在可维护性风险(config/swoole.php:33 指向 im/controller/websocket.php,但未找到该文件)。
  • 评估:
    • 可扩展性:中等偏上。模块化良好,但需统一配置与网关;前端多仓不利扩展。
    • 可维护性:中等。后端规范可读,但安全/配置问题需治理;前端需升级统一。
    • 性能中等。Swoole/Worker 可提升实时性能;数据库访问与缓存策略需细化优化。

技术栈分析

  • 后端:
    • PHP >=7.1composer.json:19ThinkPHP 6.0.*-devcomposer.json:20)。
    • 组件:topthink/think-view(模板)、topthink/think-multi-app(多应用)、topthink/think-swooleWebSocketpredis/predisRedisguzzlehttp/guzzleHTTPcomposer.json:21-28)。
    • 引导入口与路由:public/index.php:14-31route/app.php:12-14、各模块 app/*/route/route.php
  • 前端:
    • 管理后台 Auniapp/uni-admin 使用 Vue 2.5.2element-ui 2.10.1webpack 3.xuniapp/uni-admin/package.json:1-50uniapp/uni-admin/config/index.js:51)。
    • 管理后台 Bweb 使用 Vue 2 + webpack 3web/package.json:47-80)。
    • 业务端:uniapp/uni-apppages.json:631-656),依赖 ezuikit-jsjweixin-modulevue-lazyloaduniapp/uni-app/package.json:1-26)。
    • 小程序编译产物:front/app.json:1-207、多页面与组件定义。
  • 数据库/缓存:
    • MySQL 直连,表前缀 ims_config/database.php:26-55)。
    • Redispredis,结合自定义 Cache Key 方案(app/common.php:114-205)。
  • WebSocket
    • Swoole 配置(config/swoole.php:7-54Workerman 配置(config/gateway_worker.php:16-43config/worker_server.php:17-55)。

技术选型合理性

  • 后端选型ThinkPHP 6 性能与学习曲线较友好,国内社群活跃;结合 Swoole 能应对实时业务需求。建议升级到稳定版,并完善 .env 与容器化。
  • 前端选型Vue 2 + webpack 3 已老旧,维护风险增加。建议统一到 Vue 3 + Viteuni-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 等)
  • 模块划分:
    • 按业务域划分(farmshopim 等),路由组定义清晰(如 app/farm/route/route.php:6)。
    • 公共能力与工具聚合在 app/common.phpapp/Common/*extend/
  • 组织合理性:
    • 多应用模块边界明确,利于团队分工与权限隔离。
    • 公共方法集中但较大,建议拆分更细粒度的服务/工具类,增强可测试性与复用性。
    • 前端多套管理后台导致重复建设与维护成本高。

其他分析项

安全性设计评估

  • 数据库凭据硬编码,且存在外网地址与弱保护(config/database.php:19-27)。
  • CORS 允许所有来源与多头部,需谨慎(public/index.php:17-19)。
  • 文件上传UEditor存在在 public/static/Ueditor/php/controller.php:1-59,需增加鉴权、白名单与病毒/脚本扫描。
  • 建议:
    • 引入 .envdotenv管理密钥与环境CI 注入配置,严禁将密钥入库。
    • 收敛 CORS 到受信域名;为管理端与 API 区分域名与策略。
    • 上传增加鉴权、MIME 校验、大小与类型限制、存储隔离OSS/CDN并启用杀毒与内容安全。
    • 审计 SocketLog 配置的 host/client_ids 安全性(config/log.php:45-52)。

异常处理机制分析

  • 全局异常处理使用默认 ExceptionHandleapp/ExceptionHandle.php:26-68),忽略常见业务异常类别。
  • API 错误输出统一封装(app/ApiRest.php:256-270app/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/workflowsgitlab-ci.ymlJenkinsfile
  • 建议:
    • 后端:composer install --no-dev、静态分析(phpstan)、规范(php-cs-fixer)、单测(phpunit、容器镜像构建Docker
    • 前端:node >= 16pnpm/npm civite/webpack 构建与产出归档;多端产物分环境发布。
    • 部署灰度与回滚策略、配置注入K8s/Helm 或容器编排)。

证据与代码定位

  • 框架与依赖:composer.json:19-28
  • 入口与 CORSpublic/index.php:14-19
  • 路由(示例):app/farm/route/route.php:6-22route/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
  • WebSocketconfig/swoole.php:29-43config/gateway_worker.php:16-43
  • UEditor 上传:public/static/Ueditor/php/controller.php:1-59public/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-253256-270550-572
  • app/ExceptionHandle.php:26-68
  • config/database.php:19-2734-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