深入浅出-应用程序启动模板
介绍
应用程序启动模板是基于领域驱动设计(DDD)分层的应用程序结构.
在这篇文档中详细介绍了解决方案结构和项目,如果你想快速入门,请遵循以下指南:
-
参阅ASP.NET Core MVC 模板入门创建此模板的新解决方案并运行它.
-
参阅ASP.NET Core MVC 教程学习使用此模板开发应用程序.
-
入门文档 介绍了如何在几分钟内创建一个新的应用程序.
-
应用程序开发教程 学习使用此模板开发应用程序.
如何开始
你可以使用ABP CLI创建基于此启动模板的新项目,或者你也可以在入门页面创建并下载项目. 在这里我们使用CLI创建新项目.
如果未安装ABP CLI,第一步是安装ABP CLI
dotnet tool install -g Volo.Abp.Cli
然后使用 abp new
命令在空文件夹中创建新解决方案:
abp new Acme.BookStore -t app
Acme.BookStore
是解决方案的名称, 如YourCompany.YourProduct. 你可以使用单级或多级名称.- 示例中指定了启动模板 (
-t
或--template
选项). 示指定模板时,默认模板是app
.
指定UI框架
模板提供了多个UI框架
mvc
: ASP.NET Core MVC Razor页面 (默认)angular
: Angular UI
使用 -u
或 --ui
选择指定UI框架:
abp new Acme.BookStore -u angular
指定数据库提供程序
MVC
模板支持以下数据库提供程序:
EF:
Entity Framework Core (默认)mongodb:
MongoDB
使用 -d
(或 --database-provider
) 选项指定数据库提供程序:
abp new Acme.BookStore -d mongodb
解决方案结构
根据命令的选项,会创建略有不同的解决方案结构。
默认结构
如果未指定附加选项,你会得到如下所示的解决方案:
项目组织在src
和test
文件夹中。src
文件夹包含实际应用程序,该应用程序基于前面提到的DDD原则进行分层。下图展示了解决方案的层和项目的依赖关系:
下面介绍解决方案中的项目及依赖关系。
.Domain.Shared 项目
项目包含常量,枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有的层/项目中都会使用到。
例如 BookType
枚举和 BookConsts
类 (可能是 Book
实体用到的常数字段,像MaxNameLength
)都适合放在这个项目中。
- 该项目不依赖解决方案中的其他项目. 其他项目直接或间接依赖该项目
.Domain 项目
解决方案的领域层. 它主要包含 实体, 集合根, 领域服务, 值类型, 仓储接口 和解决方案的其他领域对象。
例如 Book
实体和 IBookRepository
接口都适合放在这个项目中。
- 它依赖
.Domain.Shared
项目,因为项目中会用到它的一些常量,枚举和定义其他对象。
.Application.Contracts 项目
项目主要包含 应用服务 interfaces 和应用层的 数据传输对象 (DTO)。它用于分离应用层的接口和实现. 这种方式可以将接口项目做为约定包共享给客户端。
例如 IBookAppService
接口和 BookCreationDto
类都适合放在这个项目中。
- 它依赖
.Domain.Shared
因为它可能会在应用接口和DTO中使用常量,枚举和其他的共享对象。
.Application 项目
项目包含 .Application.Contracts
项目的 应用服务 接口实现。
例如 BookAppService
类适合放在这个项目中。
- 它依赖
.Application.Contracts
项目, 因为它需要实现接口与使用DTO。 - 它依赖
.Domain
项目,因为它需要使用领域对象(实体,仓储接口等)执行应用程序逻辑。
.EntityFrameworkCore 项目
这是集成EF Core的项目. 它定义了 DbContext
并实现 .Domain
项目中定义的仓储接口。
- 它依赖
.Domain
项目,因为它需要引用实体和仓储接口。
只有在你使用了EF Core做为数据库提供程序时,此项目才会可用. 如果选择的是其他数据库提供程序那么项目的名称会改变
.DbMigrator 项目
这是一个控制台应用程序,它简化了在开发和生产环境执行数据库迁移的操作.当你使用它时;
- 必要时创建数据库(没有数据库时)。
- 应用未迁移的数据库迁移。
- 初始化种子数据(当你需要时)。