开发技术规范文档
本规范文档适用于技术团队及新引入技术的项目落地,目标是规范化公司技术选型、架构设计、开发流程,提升质量与效率,降低技术风险。
📌 一、前言
目标与背景
规范化公司技术选型、架构设计、开发流程,提升质量与效率,降低技术风险。
适用范围
适用于技术团队及新引入技术的项目落地。
🧱 二、技术栈选型与架构概览
2.1 技术体系结构图
平台整体架构图, Web 层、服务层、硬件接口层、中间件层、存储层、第三方接入等模块交互与部署方式。
2.2 技术选型说明
模块 | 技术选型 | 说明 |
---|---|---|
Web 框架 | PHP + Swoole + Hyperf | 高并发、协程模型,用于高性能后端服务 |
硬件上位机开发 | C# + C++ | C# 用于可视化控制界面,C++ 用于底层驱动与 TCP 通信模块 |
前端框架 | Vue 3.x + TypeScript/JavaScript + Vuex + Vue Router + Element Plus | 前端开发栈,响应式与组件化开发 |
对外接口 | RESTful API | 标准化输出格式,统一鉴权方案 |
数据库 | MySQL(RDS) + Redis(缓存+分布式锁) | 用数据库架构 |
中间件 | RabbitMQ | 异步任务队列、事件消息总线 |
服务发现与配置中心 | Nacos | 服务注册发现 + 动态配置中心 |
硬件通信 | TCP 服务 | 所有硬件上位机通过统一 TCP 服务接入,遵循协议解析规范 |
☁️ 三、云服务与第三方服务使用规范
3.1 阿里云资源管理
- ECS 实例命名规则:
<环境>-<业务>-<编号>
(如:prod-order-01) - 资源标签管理:按业务、环境、负责人分类
- 网络安全组规则:最小权限原则,仅开放必要端口,需开放端口时,需由技术审批
3.2 第三方基础服务
- 阿里短信服务:统一 SDK、消息模板管理、错误码处理机制
- e签宝电子签名:鉴权方式、回调接口、数据可追溯性管理
💰 四、采购审批流程
- 所有第三方服务需走审批流程:技术经理 → 总监审批 → 录入内部采购系统
- 保留完整审批链,评估成本、替代方案与风险
- 采购记录需与采购管理系统对接
📐 五、系统设计与文档规范
5.1 需求分析文档
- 使用统一模板,输出功能描述、用户角色、流程图、非功能性需求等
5.2 接口设计规范
- 遵循 RESTful 设计原则
- 使用统一接口文档框架(Apipost)
- 支持自动代码生成、Mock 调试、文档同步更新
- 硬件TCP接口使用统一接口规范,签名验签
5.3 架构决策记录
- 流程记录重大技术决策
- 内容包括:背景、讨论、决定等
🧑💻 六、开发规范与代码结构
6.1 目录结构(以自动化/MES/生产系统为例)
- 本文基于 Hyperf 官方框架结构,并结合社区最佳实践,逐一说明每个目录/文件的职责与用途。
├── .devcontainer/
├── .github/
├── app/
├── bin/
├── config/
├── migrations/
├── public/
├── runtime/
├── storage/
├── test/
├── .env.example
├── composer.json
├── phpunit.xml.dist
└── ...
6.2 Hyperf 项目目录结构详解 📁
路径 | 类型 | 功能说明 |
---|---|---|
.devcontainer/ |
文件夹 | VS Code 容器配置,统一开发环境 |
.github/ |
文件夹 | CI/CD(如 GitHub Actions)、Issue 模板配置 |
composer.json |
文件 | PHP 包依赖配置 |
.env.example |
文件 | 环境变量模板,供复制为 .env 使用 |
phpunit.xml.dist |
文件 | PHPUnit 测试配置 |
路径 | 类型 | 功能说明 |
---|---|---|
app/ |
文件夹 | 应用主要业务代码入口,包含以下子模块 |
app/Amqp/ |
文件夹 | AMQP 消息发送/消费任务类 |
app/Aspect/ |
文件夹 | AOP 切面逻辑(如日志、鉴权) |
app/Command/ |
文件夹 | CLI 自定义命令脚本 |
app/Constants/ |
文件夹 | 全局常量定义(状态码、消息类型等) |
app/Context/ |
文件夹 | 请求上下文管理(如 QID、用户信息) |
app/Controller/ |
文件夹 | HTTP 接口控制层 |
app/Dao/ |
文件夹 | 直接数据库访问层封装 |
app/Exception/ |
文件夹 | 自定义异常类和统一逻辑 |
app/Helpers/ |
文件夹 | 通用工具函数 |
app/Job/ |
文件夹 | 定时任务或队列任务执行类 |
app/JsonRpc/ |
文件夹 | JSON-RPC 接口,供硬件或外部调用 |
app/Listener/ |
文件夹 | 事件监听器与触发机制 |
app/Log/ |
文件夹 | 日志入口、格式化、QID 链路 |
app/Middleware/ |
文件夹 | HTTP/MQ 中间件(限流、鉴权、异常处理) |
app/Model/ |
文件夹 | ORM 映射层,对应数据库表 |
app/Process/ |
文件夹 | 自定义进程(如 Socket、守护进程) |
app/Repository/ |
文件夹 | Repository 或 DAO 层,封装 Model 调用 |
app/Request/ |
文件夹 | 接口参数验证对象 |
app/Scope/ |
文件夹 | Eloquent 范畴定义(global/local) |
app/Service/ |
文件夹 | 业务逻辑层 |
app/Task/ |
文件夹 | 异步任务,配合 Scheduler 使用 |
app/Utils/ |
文件夹 | 独立于业务的工具逻辑封装 |
- 代码调用层级:Controller → Repository → Dao → Service → Model
- Repository 不直接操作 DB,由 Dao 统一调用 Model
6.3 命名与依赖注入
- 类命名:以
Repository
,Dao
,Service
,Controller
,Model
... 后缀命名 - 使用
@property
注解实现隐式 DI,提高 IDE 识别与导航
6.4 响应与日志规范
- 统一响应出口:
App\Utils
- 示例代码:
namespace App\Utils;
class Response {
public function success(array $data = [], string $message = 'Success', int $code = 200): Response
{
$result = [
'code' => $code,
'message' => $message,
'data' => $data,
];
return self::jsonResponse($result);
}
public function error(string $message, int $code = 0, $data = null): Response
{
$result = [
'code' => $code,
'message' => $message,
'data' => $data,
];
return self::jsonResponse($result);
}
}
- 中间件在请求到达 Controller 前生成 qid(唯一请求 ID),写入上下文,日志需携带 qid 用于链路追踪
🔨 七、测试策略
- 单元测试:Service 层、关键工具类、协议解析模块覆盖。
- 集成测试:API 接口调试、数据库交互、消息队列流程。
- 性能测试:压力测试脚本(wrk)、Swoole 并发 benchmark。
- 协议连通:硬件 TCP 接口测试工具、模拟场景以及并发测试。
🚫 八、安全与合规
- 配置隔离:生产环境用配置中心读取,禁止硬编码。
- 鉴权方式:对外接口通过 OAuth2/JWT + IP 白名单 + 签名方式同网关。
- 硬件接入安全:TCP 接口需做协议签名校验,防重放、防 DOS、防配置漏洞攻击。
- 数据保护:敏感数据如手机号、身份证在数据库存储时采用加密。
🎓 九、文档与知识管理
- 所有文档采用 Markdown 管理,统一托管于 Git 仓库。
- 配合 Docsify 等文档生成方案,形成知识库。
- 技术规范等文档均版本化管理、长期维护。
🚩 十、组织与流程管控
- 技术规范由 技术总监 起草,由技术团队评审、讨论完善,由总监批准。
- 新技术、新框架、新工具需要流程引入(决策/评审),并记录至技术规范文档。
- 接口或框架调整须形成文档、明确迁移路径、兼容性策略。
Description
Languages
HTML
100%