文章目录
安装环境
.netcore 3.1
apb 2.2.1
dotnet tool install -g Volo.Abp.Cli
新建项目
abp new LY.Shop -t module
学习过程用个人的一个商城项目做为案例。
源码
目录
Src
.Domain.Shared 项目
项目包含常量,枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有的层/项目中都会使用到.
例如 IssueType 枚举和 IssueConsts 类 (可能是 Issue 实体用到的常数字段,像MaxTitleLength)都适合放在这个项目中.
该项目不依赖解决方案中的其他项目. 其他项目直接或间接依赖该项目.
.Domain 项目
解决方案的领域层. 它主要包含 实体, 集合根, 领域服务, 值类型, 仓储接口 和解决方案的其他领域对象.
例如 Issue 实体, IssueManager 领域服务和 IIssueRepository 接口都适合放在这个项目中.
它依赖 .Domain.Shared 项目,因为项目中会用到它的一些常量,枚举和定义其他对象.
.Application.Contracts 项目
项目主要包含 应用服务 interfaces 和应用层的 数据传输对象 (DTO). 它用于分离应用层的接口和实现. 这种方式可以将接口项目做为约定包共享给客户端.
例如 IIssueAppService 接口和 IssueCreationDto 类都适合放在这个项目中.
它依赖 .Domain.Shared 因为它可能会在应用接口和DTO中使用常量,枚举和其他的共享对象.
.Application 项目
项目包含 .Application.Contracts 项目的 应用服务 接口实现.
例如 IssueAppService 类适合放在这个项目中.
它依赖 .Application.Contracts 项目, 因为它需要实现接口与使用DTO.
它依赖 .Domain 项目,因为它需要使用领域对象(实体,仓储接口等)执行应用程序逻辑.
.EntityFrameworkCore 项目
这是集成EF Core的项目. 它定义了 DbContext 并实现 .Domain 项目中定义的仓储接口.
它依赖 .Domain 项目,因为它需要引用实体和仓储接口.
如果不需要使用EF Core,可以删除此项目.
.MongoDB 项目
这是集成MongoDB的项目.
它依赖 .Domain 项目,因为它需要引用实体和仓储接口.
如果不需要使用MongoDB,可以删除此项目.
Host
解决方案中有一些宿主应用程序可以在开发时运行模块. 在开发时会很有用. 除了正在开发的模块外,宿主应用程序包括其他模块:
宿主应用程序支持两种类型的场景.
单体 (统一) 应用场景
如果模块含有UI, 那么 .Web.Unified 应用程序于在一个站点上托管UI和API. 它有自己的 appsettings.json 配置文件(包括数据库连接字符串)和EF Core数据库迁移.
.Web.Unified 应用程序有一个名为YourProjectName_Unified的数据库(本例中名为 IssueManagement_Unified).
如果你选择了 --no-ui 选项, 这个项目不会出现在你的解决方案中.
如何运行?
将其设置成启动项, 使用包管理控制台运行 Update-Database 命令迁移数据库,然后运行应用程序. 默认用户名: admin 密码: 1q2w3E*.
分离部署&数据库 场景
在这个场景中,有三个应用程序;
.IdentityServer 应用程序是其他应用程序使用的身份验证服务器,它有自己的 appsettings.json 包含数据库连接字符串和其他配置.
.HttpApi.Host 托管模块的HTTP API. 它有自己的 appsettings.json 包含数据库连接字符串和其他配置.
.Web.Host 托管模块的UI. 它包含 appsettings.json 文件, 但是其中没有数据库连接字符串, 因为它不需要连接到数据库, 它主要调用远程API服务器和身份认证服务器.
下图展示了应用程序的关系:
你需要按照以下顺序运行应用程序:
首先, 运行 .IdentityServer,因为其他应用程序依赖它做身份认证.
然后运行 .HttpApi.Host,因为.Web.Host应用程序使用API接口.
最后运行 .Web.Host 使用用户名: admin 密码: 1q2w3E* 登录到应用程序.
说明:本问大部分内容都是从官网拷贝的,这些内容比较枯燥,而且我的言辞和理解肯定没有官方团队深入。
https://docs.abp.io/zh-Hans/abp/latest/Startup-Templates/Module