diff --git a/开发指南.md b/开发指南.md new file mode 100644 index 0000000..3009f2b --- /dev/null +++ b/开发指南.md @@ -0,0 +1,125 @@ +# 边缘人脸区域安全项目开发指南 + +## 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 模块全部加载成功。 +