深入浅出-应用程序启动模板

介绍

应用程序启动模板是基于领域驱动设计(DDD)分层的应用程序结构.

在这篇文档中详细介绍了解决方案结构和项目,如果你想快速入门,请遵循以下指南:

如何开始

你可以使用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

解决方案结构

根据命令的选项,会创建略有不同的解决方案结构。

默认结构

如果未指定附加选项,你会得到如下所示的解决方案:

bookstore-visual-studio-solution-v3

项目组织在srctest文件夹中。src文件夹包含实际应用程序,该应用程序基于前面提到的DDD原则进行分层。下图展示了解决方案的层和项目的依赖关系:

layered-project-dependencies

下面介绍解决方案中的项目及依赖关系。

.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 项目

这是一个控制台应用程序,它简化了在开发和生产环境执行数据库迁移的操作.当你使用它时;

  • 必要时创建数据库(没有数据库时)。
  • 应用未迁移的数据库迁移。
  • 初始化种子数据(当你需要时)。
posted @ 2019-09-18 10:43  Jöhan  阅读(290)  评论(0编辑  收藏  举报