想要了解ABP分层架构:ABP分层架构-CSDN博客 可以看此篇文章
apb.vnet 生成的项目的目录结构
.Application 项目
应用服务用于将领域(业务)逻辑暴露给展现层。
展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象来执行相应的业务逻辑并且将DTO返回给展现层。因此,展现层和领域层将被完全隔离开来。在一个理想的层级项目中,展现层应该从不直接访问领域对象。
项目包含 .Application.Contracts
项目的 应用服务 接口实现.
例如 IssueAppService
类适合放在这个项目中.
- 它依赖
.Application.Contracts
项目, 因为它需要实现接口与使用DTO. - 它依赖
.Domain
项目,因为它需要使用领域对象(实体,仓储接口等)执行应用程序逻辑.
.Application.Contracts 项目
项目主要包含 应用服务 interfaces 和应用层的 数据传输对象 (DTO). 它用于分离应用层的接口和实现. 这种方式可以将接口项目做为约定包共享给客户端.
例如 IIssueAppService
接口和 IssueCreationDto
类都适合放在这个项目中.
- 它依赖
.Domain.Shared
因为它可能会在应用接口和DTO中使用常量,枚举和其他的共享对象.
.DbMigrator 项目
- 项目开发过程中难免会涉及到一些业务相关的基础数据,我们称之为种子数据,主要为了方便测试功能或者展示效果;
- 常规做法是手动到数据库表创建数据,但是随着表结构更改或者数据清空后,又要重新录入基础数据,很是麻烦;
- 采用CodeFirst 通过建模领域对象生成实体表结构的方式,为了便于种子数据的存储和管理。DbMigrator 项目就是用于种子数据初始化到数据库的控制台程序
在这个项目中有 appsettings.json 是用来配置数据库连接的文件
.Domain 项目
解决方案的领域层. 它主要包含 实体,集合,根, 领域服务, 值类型, 仓储接口 和解决方案的其他领域对象.
例如 Issue
实体, IssueManager
领域服务和 IIssueRepository
接口都适合放在这个项目中.
- 它依赖
.Domain.Shared
项目,因为项目中会用到它的一些常量,枚举和定义其他对象.
.Domain.Shared 项目
项目包含常量,枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有的层/项目中都会使用到.
例如 IssueType
枚举和 IssueConsts
类 (可能是 Issue
实体用到的常数字段,像MaxTitleLength
)都适合放在这个项目中.
- 该项目不依赖解决方案中的其他项目. 其他项目直接或间接依赖该项目.
.EntityFrameworkCore 项目
这是集成EF Core的项目. 它定义了 DbContext
并实现 .Domain
项目中定义的仓储接口.
就是连接数据库的项目,可以连接sql server ,mysql
- 它依赖
.Domain
项目,因为它需要引用实体和仓储接口.
如果不需要使用EF Core,可以删除此项目.
.HttpApi 项目
在ABP VNext框架中,HttpApi项目是我们作为Restful格式的控制器对象的封装项目
- 它依赖 .Contracts 项目
.HttpApi.Client 项目
为前端应用程序(如Web、移动应用等)或其他服务提供一个与后端HTTP API交互的客户端库。
- 它依赖 .Contracts 项目
.Web 项目
用于构建基于Web的用户界面(UI)和与后端服务进行交互。Web模块在ABP框架中提供了构建Web应用程序所需的基础设施和功能。