.Domain.Share 项目
该项目包含常量、枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有层/项目都会使用到。例如实体类Book中用到的枚举BookType、常量
BookConsts
都适合放在这个项目要中。
该项目不依赖解决方案中的其他项目,其他项目简介或直接依赖该项目该项目
.Domain 项目
解决方案中的领域层,包含 实体,集合根,领域服务,值类型,仓储接口和解决方案的其他领域对象。例如实体和IBookRepository类都适合放在这个项目中
它依赖.Domain.Share 因为他可能会在应用接口和DTO中使用常量、枚举或者其他的共享对象。
.Application.Contracts 项目
项目主要包含应用服务interfaces和应用层的数据传输对象DTO,它用于分离应用层的接口和实现,这种方式可以将接口项目作为约定包共享给客户端。
例如 IBookAppService接口和BookCreationDto类都适合放在这个项目中
它依赖与.Domain.Share因为 他可能会在应用接口和DTO中使用常量、枚举或者其他的共享对象。
.Application 项目
项目包含 .Application.COntracts项目的应用服务接口的实现。
例如BookAppService类适合放在这个项目中
它依赖.Application.Cantracts项目,因为它需要实现接口与使用DTO 它依赖与.Domain.Share因为 他可能会在应用接口和DTO中使用常量、枚举或者其他的共享对象。
.EntityFrameworkCore 项目
集成EF Core项目,定义了DbContext并实现.Domain项目中定义的仓储接口
它依赖.Domain项目。因为它需要引用实体和仓储接口
.EntityFrameworkCore.DbMigrations项目
包含解决方案中EF Core的数据库迁移,它有独立的DbContext来专门管理迁移
ABP是一个模块化的框架,理想的设计是让每个模块都有自己的DbContext类,这是用于迁移的DbContext就会发挥作用,他将所有的DbContext配置统一到单个模型中以维护单个数据库的模式,对于更高级的场景,程序可以拥有多个数据库(每个数据库有一个或多个模块表)和多个迁移
DbContext
(每个都维护不同的数据库模式)
需要注意,迁移
DbContext
仅用于数据库迁移,而不在运行时使用.
- 它依赖
.EntityFrameworkCore
项目,因为它重用了应用程序的DbContext
配置
.DbMigrator项目
这是一个控制台应用程序,它简化了在开发和生产环境执行数据库迁移的操作,当你使用它时:
必须时创建数据库(没有数据库时)
应用未迁移的数据迁移
初始化种子数据(当你需要时)
虽然创建数据库和应用迁移似乎只对关系数据库有用,但即使你选择NoSQL数据库提供程序(如MongoDB),也会生成此项目. 这时,它会为应用程序提供必要的初始数据.
- 它依赖
.EntityFrameworkCore.DbMigrations
项目 (针对EF Core),因为它需要访问迁移文件.- 它依赖
.Application.Contracts
项目,因为它需要访问权限定义在初始化种子数据时为管理员用户赋予所有权限.
.HttpApi项目
用于定义API控制器
大多数情况下,你不需要手动定义API控制器,因为ABP的动态API功能会根据的应用层自动创建API控制器,但是如果你需要编写API控制器,那么它是最合适的地方
它依赖.Application.Contracts项目,因为它需要注入应用服务接口
.HttpApi.Client项目
定义C#客户端代理使用解决方案中的Http API项目,可以将上编辑共享给第三方客户端,使其轻松的在DotNet应用程序中使用你的http API
ABP有动态 C# API 客户端功能,所以大多数情况下你不需要手动的创建C#客户端代理.
.HttpApi.Client.ConsoleTestApp
项目是一个用于演示客户端代理用法的控制台应用程序.
- 它依赖
.Application.Contracts
项目,因为它需要使用应用服务接口和DTO.如果你不需要为API创建动态C#客户端代理,可以删除此项目和依赖项
.Web项目
包含应用程序的用户界面(UI)。如果使用ASP.NET Core MVC UI,包含应用程序主要的
appsettings.json
配置文件,用于配置数据库连接字符串和应用程序的其他配置
依赖
.HttpApi
项目,因为UI层需要使用解决方案的API和应用服务接口.
.分层结构
如果你选择了 ASP.NET core UI 并指定了 --tiered选项,CLI会创建分层解决方案,分层结构的目的是将Web应用程序和Http Api部署到不同的服务器
参考文件:Startup Templates/Application | Documentation Center | ABP.IO
写这篇文章的目的是为了方便自己学习ABP