Appearance
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技术团队