# Abp Pro Layered

> 本项目的分层 DDD 开发规则。新增或修改实体、领域服务、DTO、应用服务、控制器、权限或业务模块时使用。

- Skill: `wangjunzzz/abp-pro-layered` (Agent Skill)
- Install (CLI): `npx skillmds@latest add wangjunzzz/abp-pro-layered`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wangjunzzz/abp-pro-layered/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: wangjunzzz (https://skillmd.com/u/wangjunzzz)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wangjunzzz/abp-pro-layered

---


# ABP Pro 分层开发

## 代码归属

- `*.Domain.Shared`：常量、枚举、本地化、权限和共享契约。
- `*.Domain`：聚合、值对象、领域服务、仓储接口和领域规则。
- `*.Application.Contracts`：DTO 和应用服务接口。
- `*.Application`：用例编排、授权和 Mapster 映射。
- `*.EntityFrameworkCore` 或 `*.FreeSqlRepository`：持久化实现。
- `*.HttpApi`：控制器和 HTTP 层代码。

模块代码放在所属模块中，不要把模块业务规则放入主服务。

## 新功能流程

1. 在聚合或领域服务中定义业务不变量和状态变更。
2. 在 `Domain.Shared` 中添加常量、枚举、本地化和权限名称。
3. 只有通用仓储无法清晰表达查询时，才增加自定义仓储方法。
4. 在 `Application.Contracts` 定义输入、输出 DTO 和服务契约。
5. 在 `Application` 实现用例、授权和 Mapster 映射。
6. 只有需要明确 HTTP 接口时才增加控制器。
7. 增加针对领域规则或应用用例的测试。

## 禁止事项

- 不在控制器或仓储中编写业务规则。
- 不直接把实体作为 API DTO 暴露。
- 不绕过聚合方法直接修改聚合内部状态。
- 不在领域层或应用层依赖具体数据库实现。

## 模板

可复用模块以 `templates/pro-module` 为准；标准服务模板以 `templates/pro-nuget/service` 为准。修改模板时必须同步现有项目的分层和包版本约定。

