Skip to content

DSPlatform 后端架构详解

概述

DSPlatform 后端基于 ThinkPHP 8.0 框架构建,采用多应用架构模式,支持多端 API 服务。系统采用分层架构设计,包含控制器层、服务层、数据访问层和模型层,确保代码的可维护性和可扩展性。

技术栈

核心框架

  • PHP: 8.0+
  • ThinkPHP: 8.0
  • MySQL: 8.0+
  • Redis: 6.0+

主要依赖

  • JWT: Firebase PHP-JWT 6.10+ (身份认证)
  • 支付: yansongda/pay 3.7+ (微信支付、支付宝)
  • 微信: w7corp/easywechat 6.17+ (微信生态集成)
  • 短信: alibabacloud/dysmsapi (阿里云短信)
  • 文件存储: aliyuncs/oss-sdk-php (阿里云OSS)
  • 二维码: endroid/qr-code (二维码生成)
  • API文档: zircote/swagger-php (Swagger文档)

系统架构

整体架构图

┌─────────────────────────────────────────────────────────────┐
│                        多端应用层                              │
├─────────────┬─────────────┬─────────────┬─────────────────────┤
│ 管理后台API  │  用户端API   │  商户端API   │   其他端API         │
│ AdminAPI    │   UserAPI   │ MerchantAPI │ RiderAPI/TechAPI   │
└─────────────┴─────────────┴─────────────┴─────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                        控制器层                              │
├─────────────┬─────────────┬─────────────┬─────────────────────┤
│  业务控制器  │  基础控制器  │  中间件层    │     路由层           │
│ Controller  │ BaseController│ Middleware │     Route           │
└─────────────┴─────────────┴─────────────┴─────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                        服务层                                │
├─────────────┬─────────────┬─────────────┬─────────────────────┤
│  业务服务    │  基础服务    │  第三方服务  │     工具服务         │
│   Service   │ BaseService │ ThirdParty │     Utils           │
└─────────────┴─────────────┴─────────────┴─────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                        数据访问层                            │
├─────────────┬─────────────┬─────────────┬─────────────────────┤
│  数据访问对象 │  数据模型    │  枚举定义    │     验证器           │
│     DAO     │    Model    │    Enum     │    Validate        │
└─────────────┴─────────────┴─────────────┴─────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                        数据存储层                            │
├─────────────┬─────────────┬─────────────┬─────────────────────┤
│    MySQL    │    Redis    │   文件存储   │     第三方服务      │
│   主从复制   │   缓存队列   │  OSS/本地   │   微信/支付宝/物流   │
└─────────────┴─────────────┴─────────────┴─────────────────────┘

目录结构

应用目录结构

app/
├── adminapi/              # 管理后台API
│   ├── controller/        # 控制器
│   ├── middleware/        # 中间件
│   ├── route/            # 路由定义
│   └── service/          # 服务层
├── api/                  # 用户端API
│   ├── controller/        # 控制器
│   ├── middleware/        # 中间件
│   ├── route/            # 路由定义
│   └── service/          # 服务层
├── merchantapi/          # 商户端API
├── storeapi/             # 店铺端API
├── riderapi/             # 骑手端API
├── techapi/              # 技师端API
├── bloggerapi/           # 博主端API
├── common/               # 公共模块
│   ├── dao/             # 数据访问层
│   ├── model/           # 数据模型
│   ├── enum/            # 枚举定义
│   └── middleware/      # 公共中间件
├── deshang/              # 核心框架
│   ├── base/            # 基础类
│   ├── core/            # 核心功能
│   ├── service/         # 公共服务
│   ├── third_party/     # 第三方集成
│   └── utils/           # 工具类
└── platform/            # 多平台模块
    ├── mall/            # 商城平台
    │   ├── app/
    │   │   ├── adminapi/
    │   │   ├── api/
    │   │   └── storeapi/
    │   └── config/
    ├── food/            # 餐饮平台
    │   ├── app/
    │   │   ├── adminapi/
    │   │   ├── api/
    │   │   └── storeapi/
    │   └── config/
    ├── house/           # 家政平台
    │   ├── app/
    │   │   ├── adminapi/
    │   │   ├── api/
    │   │   └── storeapi/
    │   └── config/
    └── kms/             # 其他平台
        ├── app/
        │   ├── adminapi/
        │   ├── api/
        │   └── storeapi/
        └── config/

核心组件

1. 多应用架构

系统采用 ThinkPHP 8.0 的多应用模式,每个应用独立处理不同端的请求:

应用列表

  • adminapi: 管理后台API,处理管理员相关操作
  • api: 用户端API,处理C端用户操作
  • merchantapi: 商户端API,处理商户管理操作
  • storeapi: 店铺端API,处理店铺运营操作
  • riderapi: 骑手端API,处理配送相关操作
  • techapi: 技师端API,处理上门服务操作
  • bloggerapi: 博主端API,处理内容创作操作

应用配置

php
// config/app.php
return [
    'default_app'      => 'index',
    'app_map'          => [],
    'domain_bind'      => [],
    'deny_app_list'    => [],
];

2. 分层架构

控制器层 (Controller)

  • 处理HTTP请求和响应
  • 参数验证和格式化
  • 调用服务层处理业务逻辑
php
// 基础控制器示例
abstract class BaseController
{
    protected $request;
    protected $app;
    protected $middleware = [];
    protected $batchValidate = false;
    
    public function __construct(App $app)
    {
        $this->app = $app;
        $this->request = $this->app->request;
        $this->initialize();
    }
    
    protected function validate(array $data, string|array $validate, array $message = [], bool $batch = false)
    {
        // 数据验证逻辑
    }
}

服务层 (Service)

  • 封装业务逻辑
  • 数据处理和转换
  • 调用数据访问层
php
// 基础服务类示例
class BaseService
{
    protected $dao;
    protected $model;
    protected $request;
    protected $batchValidate = false;
    
    public function __construct()
    {
        $this->request = request();
    }
    
    public function getPageParams()
    {
        $page_current = (int) input('param.page_current');
        $page_size = (int) input('param.page_size');
        
        return [
            'page_current' => $page_current > 0 ? $page_current : 1,
            'page_size' => $page_size > 0 ? $page_size : 10,
        ];
    }
    
    public function getPaginate($model)
    {
        $page_params = $this->getPageParams();
        return $model->paginate([
            'list_rows' => $page_params['page_size'],
            'page' => $page_params['page_current'],
        ])->toArray();
    }
}

数据访问层 (DAO)

  • 数据库操作封装
  • 查询优化和缓存
  • 数据模型映射
php
// 基础DAO类示例
class BaseDao
{
    protected $model;
    
    public function __construct() { }
    
    public function getPageParams()
    {
        $page_current = (int) input('param.page_current');
        $page_size = (int) input('param.page_size');
        
        return [
            'page_current' => $page_current > 0 ? $page_current : 1,
            'page_size' => $page_size > 0 ? $page_size : 10,
        ];
    }
    
    public function getPaginate($model)
    {
        $page_params = $this->getPageParams();
        return $model->paginate([
            'list_rows' => $page_params['page_size'],
            'page' => $page_params['page_current'],
        ])->toArray();
    }
    
    public function getModel()
    {
        return $this->model;
    }
    
    public function setModel($model)
    {
        $this->model = $model;
    }
}

模型层 (Model)

  • 数据表映射
  • 字段验证和转换
  • 关联关系定义

3. 中间件系统

认证中间件

  • AdminAuthorizeToken: 管理员Token验证
  • UserAuthorizeToken: 用户Token验证
  • AdminAuthorizeRole: 管理员权限验证

日志中间件

  • AdminAuthorizeLog: 管理员操作日志
  • UserAuthorizeLog: 用户操作日志

跨域中间件

  • AllowCrossMiddleware: 跨域请求处理

4. 缓存系统

缓存工具类 (CacheUtil)

php
class CacheUtil
{
    // 系统配置缓存
    const SYS_CONFIG_TAG = 'sys_config';
    const SYS_CONFIG_KEY = 'sys_config_%s';
    
    // 商品缓存
    const GOODS_TAG = 'goods';
    const GOODS_LIST_KEY = 'goods_list_%s';
    const GOODS_INFO_KEY = 'goods_info_%s';
    
    // 店铺缓存
    const STORE_TAG = 'store';
    const STORE_INFO_KEY = 'store_info_%s';
    
    public static function set($key, $value, $ttl = 0, $tag = null, $store = null)
    {
        return Cache::store($store)->tag($tag)->set($key, $value, $ttl);
    }
    
    public static function get($key, $default = null, $store = null)
    {
        return Cache::store($store)->get($key, $default);
    }
}

缓存策略

  • L1缓存: 应用内存缓存
  • L2缓存: Redis分布式缓存
  • L3缓存: 数据库查询缓存

5. 第三方集成

驱动管理器基类

php
// 驱动管理器基类
abstract class BaseDriverManager
{
    protected $namespace;      // 驱动类命名空间
    protected $driver;         // 当前使用的驱动实例
    protected $driverName;     // 当前使用的驱动名称
    protected $config;         // 配置信息
    protected $drivers = [];   // 缓存的驱动实例
    
    public function __construct(string $driverName, array $config = [])
    {
        $this->driverName = ucfirst(strtolower($driverName)) ?: $this->getDefaultDriverName();
        $this->config = $config;
        $this->loadDriver();
    }
    
    abstract protected function getDefaultDriverName(): string;
    
    protected function loadDriver()
    {
        // 驱动加载逻辑
    }
}

支付集成

php
// 支付管理器
class TradeManager extends BaseDriverManager
{
    protected $namespace = 'app\deshang\third_party\trade\providers';
    
    protected function getDefaultDriverName(): string
    {
        return config('trade.default', 'Yansongda');
    }
}

微信集成

php
// 微信服务管理器
class WechatManager
{
    public function getMiniProgram()
    {
        return EasyWeChat::miniProgram();
    }
    
    public function getOfficialAccount()
    {
        return EasyWeChat::officialAccount();
    }
}

短信集成

php
// 短信管理器
class SmsManager extends BaseDriverManager
{
    protected $namespace = 'app\deshang\third_party\sms\providers';
    
    protected function getDefaultDriverName(): string
    {
        return 'Tencent';
    }
}

数据库设计

数据库配置

php
// config/database.php
return [
    'default' => env('DB_DRIVER', 'mysql'),
    'connections' => [
        'mysql' => [
            'type' => env('DB_TYPE', 'mysql'),
            'hostname' => env('DB_HOST', '127.0.0.1'),
            'database' => env('DB_NAME', 'ds_admin'),
            'username' => env('DB_USER', 'root'),
            'password' => env('DB_PASS', ''),
            'charset' => 'utf8mb4',
            'prefix' => env('DB_PREFIX', 'ds_'),
        ],
    ],
];

核心数据表

  • 用户相关: ds_user, ds_user_address, ds_user_balance
  • 商品相关: ds_tbl_goods, ds_tbl_goods_category, ds_tbl_goods_sku
  • 订单相关: ds_tbl_order, ds_tbl_order_goods, ds_tbl_order_delivery
  • 店铺相关: ds_tbl_store, ds_tbl_store_category, ds_tbl_store_coupon
  • 支付相关: ds_trade_pay_log, ds_trade_refund_log
  • 系统相关: ds_sys_config, ds_sys_area, ds_sys_article

安全机制

1. 身份认证

  • JWT Token: 基于Firebase PHP-JWT实现
  • Token版本控制: 支持Token版本管理和失效机制
  • 多端隔离: 不同端使用独立的Token体系
  • Token缓存: 使用TokenCache类管理Token版本

2. 权限控制

  • RBAC模型: 基于角色的访问控制
  • 菜单权限: 细粒度的菜单访问控制
  • 数据权限: 基于用户角色的数据访问控制

3. 数据验证

  • 参数验证: 使用ThinkPHP验证器
  • SQL注入防护: 使用ORM防止SQL注入
  • XSS防护: 输出数据自动转义

4. 接口安全

  • 请求签名: 重要接口支持请求签名验证
  • 频率限制: 接口访问频率限制
  • IP白名单: 管理接口支持IP白名单

性能优化

1. 缓存优化

  • 多级缓存: 内存缓存 + Redis缓存 + 数据库缓存
  • 缓存预热: 系统启动时预加载热点数据
  • 缓存更新: 数据变更时自动更新相关缓存

2. 数据库优化

  • 索引优化: 合理设计数据库索引
  • 查询优化: 避免N+1查询问题
  • 分页优化: 大数据量分页查询优化

3. 接口优化

  • 响应压缩: 启用Gzip压缩
  • 数据分页: 大数据量接口支持分页
  • 字段筛选: 支持按需返回字段

开发规范

1. 命名规范

  • 类名: PascalCase (如:UserService, OrderController)
  • 方法名: camelCase (如:getUserInfo, createOrder)
  • 变量名: camelCase (如:$userInfo, $orderList)
  • 常量名: UPPER_SNAKE_CASE (如:USER_STATUS_ACTIVE)

2. 目录规范

  • 控制器: 放在对应应用的 controller/ 目录
  • 服务类: 放在对应应用的 service/ 目录
  • 数据模型: 放在 common/model/ 目录
  • 验证器: 放在对应模块的 validate/ 目录

3. 代码规范

  • PSR-4: 遵循PSR-4自动加载规范
  • PSR-12: 遵循PSR-12代码风格规范
  • 注释规范: 使用PHPDoc注释规范

部署架构

1. 环境要求

  • PHP: 8.0+
  • MySQL: 8.0+
  • Redis: 6.0+
  • Nginx: 1.20+ (推荐)

2. 部署结构

生产环境
├── Web服务器 (Nginx)
├── 应用服务器 (PHP-FPM)
├── 数据库服务器 (MySQL)
├── 缓存服务器 (Redis)
└── 文件存储 (OSS/本地)

3. 配置管理

  • 环境变量: 使用 .env 文件管理配置
  • 配置分离: 开发、测试、生产环境配置分离
  • 敏感信息: 敏感配置信息加密存储

监控和日志

1. 系统监控

  • 性能监控: 接口响应时间、数据库查询时间
  • 错误监控: 异常错误、系统错误日志
  • 资源监控: CPU、内存、磁盘使用率

2. 业务监控

  • 用户行为: 用户操作日志、访问统计
  • 业务指标: 订单量、支付成功率、用户活跃度
  • 异常告警: 关键业务异常实时告警

3. 日志管理

  • 访问日志: Nginx访问日志
  • 应用日志: PHP应用日志
  • 错误日志: 系统错误日志
  • 业务日志: 关键业务操作日志

扩展性设计

1. 模块化设计

  • 应用模块: 每个端独立的应用模块
  • 业务模块: 按业务功能划分的模块
  • 插件模块: 支持插件化扩展

2. 接口设计

  • RESTful API: 遵循RESTful设计规范
  • 版本控制: 支持API版本管理
  • 文档生成: 自动生成API文档

3. 数据设计

  • 分库分表: 支持大数据量分库分表
  • 读写分离: 支持数据库读写分离
  • 数据迁移: 支持数据平滑迁移

最佳实践

1. 开发实践

  • 代码复用: 公共逻辑抽取为工具类
  • 异常处理: 统一的异常处理机制
  • 数据验证: 严格的数据验证规则

2. 性能实践

  • 缓存策略: 合理使用缓存提升性能
  • 数据库优化: 优化数据库查询性能
  • 接口优化: 减少不必要的数据传输

3. 安全实践

  • 输入验证: 严格验证所有输入数据
  • 权限控制: 最小权限原则
  • 日志记录: 记录关键操作日志

相关链接


最后更新:2024-01-20
维护者:DSPlatform技术团队