zcloud_gbs_edgeguard/开发指南.md

126 lines
5.5 KiB
Markdown
Raw Normal View History

2026-09-01 17:42:26 +08:00
# 边缘人脸区域安全项目开发指南
## 1. 项目说明
`zcloud_gbs_edgeguard` 是“边缘人脸区域安全”服务,服务标识为 `jjb-saas-zcloud-edgeguard`,网关前缀为 `edgeguard`
项目用于承载边缘侧人脸与区域安全相关能力。后续可在此服务中逐步实现区域、摄像头、人脸库、人员授权、识别事件和告警记录等业务。
当前脚手架已经提供了一套“风险点RiskPoint”的 CRUD 示例。它是开发参考样例,不代表最终业务模型;新业务应按相同分层方式扩展,避免将所有逻辑堆放在 Controller 或 Mapper 中。
## 2. 模块结构
```text
zcloud_gbs_edgeguard
├── start # 服务启动与运行配置
├── web-client # 对外服务接口、命令对象、查询对象、返回对象
├── web-adapter # HTTP Controller、接口适配
├── web-app # 应用层用例编排与事务控制
├── web-domain # 领域实体、领域网关接口
└── web-infrastructure # MyBatis、数据库对象、Repository、网关实现
```
模块依赖应保持从外向内:
```text
web-adapter → web-client / web-app → web-domain → web-infrastructure
start 负责组装并启动全部模块
```
不要让 `web-client` 依赖 `web-app`、`web-domain` 或 `web-infrastructure`;不要在 `web-adapter` 中直接访问 Mapper。
## 3. 运行与配置
启动类是 `start/src/main/java/com/zcloud/gbs/edgeguard/Application.java`
Nacos 配置在 `start/src/main/resources/nacos.yml`
```yaml
application:
name: jjb-saas-zcloud-edgeguard
gateway: edgeguard
cn-name: 边缘人脸区域安全
```
公共配置通过 `bootstrap.yml` 导入,包括 Nacos、SDK 与 Swagger 配置。开发环境使用当前 `nacos.yml``sdk.yml`;生产环境配置应根据部署环境另行提供,不能直接复制其他服务的地址、密钥或账号。
在 IDEA 中从根 `pom.xml` 重新加载 Maven 后,运行 `Application` 启动服务。也可在已配置 Maven 命令的环境执行:
```bash
mvn clean package -DskipTests
```
## 4. 新增业务功能的规范
以下以当前 `RiskPoint` 样例为参考。假设需要新增“安全区域SecurityZone”功能应同时补齐各层不要只新增一张表或一个 Controller。
| 模块 | 放置内容 | RiskPoint 样例 |
| --- | --- | --- |
| `web-client` | API 接口、`AddCmd`、`UpdateCmd`、`PageQry`、`CO` | `RiskPointServiceI`、`RiskPointAddCmd` |
| `web-adapter` | REST Controller、Swagger 注解、参数校验 | `RiskPointController` |
| `web-app` | `*AddExe`、`*UpdateExe`、`*RemoveExe`、`*QueryExe`、应用服务 | `RiskPointAddExe` |
| `web-domain` | `*E` 领域实体、`*Gateway` 接口 | `RiskPointE`、`RiskPointGateway` |
| `web-infrastructure` | `*DO`、Mapper、Mapper XML、Repository、Gateway 实现 | `RiskPointDO`、`RiskPointMapper` |
### 4.1 包与命名
- Java 包统一以 `com.zcloud.gbs.edgeguard` 开头。
- 领域实体使用 `XxxE`,例如 `SecurityZoneE`
- 持久化对象使用 `XxxDO`,例如 `SecurityZoneDO`
- 返回对象使用 `XxxCo`,命令使用 `XxxAddCmd`、`XxxUpdateCmd`,分页查询使用 `XxxPageQry`
- 应用层执行器使用 `XxxAddExe`、`XxxUpdateExe`、`XxxRemoveExe`、`XxxQueryExe`。
- 网关接口使用 `XxxGateway`,其实现放在 `gatewayimpl` 包。
### 4.2 HTTP 接口
Controller 只做请求接收、校验与调用应用服务,不放业务判断和数据库访问。
接口统一使用服务网关前缀:
```java
@RequestMapping("/edgeguard/securityZone")
```
参照现有样例使用:
- `POST /save`:新增
- `POST /list`:分页查询
- `GET /{id}`:详情
- `PUT /edit`:修改
- `DELETE /{id}`:删除
- `DELETE /ids`:批量删除
入参使用 `@Validated` 和 Bean Validation 注解,例如 `@NotEmpty`、`@NotNull`;接口返回使用 COLA 的 `SingleResponse`、`PageResponse`、`MultiResponse` 或 `Response`
### 4.3 应用层与事务
用例逻辑放在 `web-app`。涉及写入的执行器参照 `RiskPointAddExe` 使用:
```java
@Transactional(rollbackFor = Exception.class)
public boolean execute(SecurityZoneAddCmd cmd) {
// 参数转换、业务校验、调用领域网关
}
```
保存失败时抛出 `BizException`,不要仅返回 `false` 或吞掉异常。跨表写入必须在同一个应用层事务中完成。
### 4.4 领域与持久化
- `web-domain` 只定义领域模型和网关能力,不依赖 MyBatis Mapper。
- `web-infrastructure` 实现领域网关,负责 Entity/DO 转换和数据库读写。
- Mapper 接口放在 `persistence.mapper`XML 放在 `src/main/resources/mybatis`
- 新增表或变更表结构时,同步维护 `web-infrastructure/src/main/resources/TableCreationDDL.sql`,并按实际发布流程补充数据库迁移脚本。
- 通用审计字段、逻辑删除等规则优先复用项目依赖中的基础模型,不要重复造字段和能力。
## 5. 提交前检查
- 根 POM 可识别全部六个模块。
- 新功能的 API、DTO、应用层、领域层、基础设施层均已补齐。
- Controller 没有直接调用 Mapper领域层没有依赖基础设施层。
- Nacos 服务名和网关前缀保持 `edgeguard`,不要遗留 `risk`、`org.example` 等脚手架名称。
- Swagger 标签、接口路径、日志和异常提示与实际业务一致。
- 数据库字段、DO、Mapper、Mapper XML 和 DDL 保持一致。
- 执行 Maven 构建并在 IDEA 中确认 Maven 模块全部加载成功。