Appearance
新增模块流程
本页给二开者一条从零新增模块的标准路径。你可以先用代码生成器生成基础 CRUD,再按本流程补齐平台约定。
1. 明确模块边界
先回答:
- 这个模块属于平台能力还是业务能力?
- 是否需要租户隔离?
- 是否需要数据权限?
- 是否需要审批?
- 是否需要消息通知?
- 是否需要文件附件?
- 是否需要导入导出?
2. 后端实现
建议顺序:
- 新增实体。
- 新增 DTO 和请求对象。
- 新增应用服务接口。
- 实现带
[DynamicApi]和方法元数据的应用服务。 - 注册依赖注入。
- 仅在文件上传、下载等场景增加薄传输端点。
- 在
PageDefinitionProvider注册路由、组件、标题和权限。 - 确认 RBAC 权限码与 ABAC 资源动作一致。
- 增加测试。
完整示例见 Dynamic API 与 PageRegistry。代码生成器已经按这套约定生成,不再生成标准 CRUD Controller 或菜单种子。
3. 前端实现
建议顺序:
- 新增
api文件。 - 新增页面目录。
- 实现列表、筛选、分页。
- 实现新增和编辑表单。
- 实现删除或状态操作。
- 接入按钮权限。
- 检查动态菜单。
4. 接入工作流
如果模块需要审批:
- 增加审批状态字段。
- 增加提交审批动作。
- 增加撤回审批动作。
- 保存工作流实例 ID 或业务标识。
- 配置业务类型和流程绑定。
- 实现业务状态处理器。
- 页面增加流程详情入口。
5. 接入消息中心
如果模块需要通知:
- 定义事件类型。
- 增加默认通知策略。
- 增加默认模板。
- 在业务动作中发送通知。
- 链接到对应业务详情。
- 增加模板渲染测试。
6. 使用事件总线和工作单元
如果模块有多个写操作或提交后副作用:
- 在应用服务中注入
IUnitOfWork。 - 用
BeginTransactionAsync开启事务。 - 执行业务写入。
- 用
AddPostCommitEvent登记提交后事件。 - 用
CommitAsync提交。 - 在异常时调用
RollbackAsync。
提交后通知、清缓存和状态同步建议放到 ILocalEventHandler<TEvent> 中。
7. 文档和验收
每个完整功能建议补:
text
docs/features/YYYY-MM-DD-feature-name/01-requirements.md
docs/features/YYYY-MM-DD-feature-name/02-tasks.md
docs/features/YYYY-MM-DD-feature-name/03-summary.md上线前至少验证:
- 菜单可见。
- 权限生效。
- 列表查询正确。
- 新增、编辑、删除或状态操作正确。
- 租户边界正确。
- 审计日志可追踪。
- 前端类型检查通过。
- 后端目标测试通过。