初识 ABP.vNext
一、ABP.vNext 了解与使用
在这之前我们先了解一下什么是ABP?
- ABP是ASP.NET Boilerplates 缩写,是一个开源并且有丰富文档的应用框架,开发宗旨是:“为所有公司,所有开发人员,开发与一个通用框架!”,而且不只是一个框架,同时提供一个强大的基于DDD的架构模型和最佳实践。
- 1、这不是样板代码,而是框架
- 2、基于传统NET框架
- 3、模块化设计
- 4、DDD架构模型实践
- 官网:https://aspnetboilerplate.com
- github:https://github.com/aspnetboilerplate/aspnetboilerplate
ABP.vNext 是什么?
- 是ASP.NET Core的开源WEB应用程序框架,就是再封装一层,扩展了一系列的封装,完成了很多通用的功能,便于快速开发
-
ABP是用于创建现代Web应用程序的完成架构和强大的基础设施!遵循最佳实践和约定,为你提供SOLID(设计模式的五大原则)开发经验。
- 官网: https://www.abp.io
- github:https://github.com/abpframework/abp
ABP和ABP.vNext的关系?
- ABP vNext是基于ASP.NET Core 完全从头开发的框架,而不是ABP的进化版本。使用ABP的名称只是为表示ABP VNext是 ABP的继承者。
- 类似:MVC--> ASP.NET Core MVC
- ps:ABP vNext Framework 开源 , ABP vNext Commercial 收费商业。
ABP.vNext框架特点:
- 0、SOLID
- 1、应用程序化模块化。
- 2、领域驱动设计DDD
- 3、非常支持微服务
- 4、ORM/ 数据库无关性和MongoDB集成
- 5、可扩展既可替换
ABP.vNext 基础设施:
- 1、领域驱动设计
- 2、模块化设计
- 3、多租户
- 4、Dependency Injection(AutoFack)
- 5、认证于授权(Ids4)
- 6、事件总线(Event Bus)
- 7、数据访问(EF Core、Dapper)
- 8、Http API及动态代理
- 其他:
- 1、横切面关注(AOP)
- 2、虚拟文件系统
- 3、数据过滤
- 4、本地化(多语言)
- 5、异常处理
- 6、审计日志
- PS:是一个很全面的框架,同时也是一个很重的框架。
二、创建APB项目:
- 1、使用ABP CLI 工具直接生产:https://docs.abp.io/Zh-Hans/abp/latest/CLI
- 2、直接生成:https://abp.io
三、生成项目
以下会对整个项目目录文件做一个解读:
Domain.Shared 项目:
- 项目包含常量,枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有的层/项目中都会使用到.
- 例如 IssueType 枚举和 IssueConsts 类 (可能是 Issue 实体用到的常数字段,像MaxTitleLength)都适合放在这个项目中.
- 该项目不依赖解决方案中的其他项目. 其他项目直接或间接依赖该项目.
Domain 项目:
- 解决方案的领域层. 它主要包含 实体, 集合根, 领域服务, 值类型, 仓储接口 和解决方案的其他领域对象.
- 例如 Issue 实体, IssueManager 领域服务和 IIssueRepository 接口都适合放在这个项目中.
- 它依赖 Domain.Shared 因为它可能会在应用接口和DTO中使用常量,枚举和其他的共享对象.
Application 项目:
- 项目包含 .Application.Contracts 项目的 应用服务 接口实现.
- 例如 IssueAppService 类适合放在这个项目中.
- 它依赖 .Application.Contracts 项目, 因为它需要实现接口与使用DTO.
- 它依赖 .Domain 项目,因为它需要使用领域对象(实体,仓储接口等)执行应用程序逻辑.
EntityFrameworkCore 项目:
- 这是集成EF Core的项目. 它定义了 DbContext 并实现 .Domain 项目中定义的仓储接口.
- 它依赖 .Domain 项目,因为它需要引用实体和仓储接口.
- 注意:如果不想使用EF Core,可以删除此项目
MongoDB 项目:
- 这是集成MongoDB的项目.
- 它依赖 .Domain 项目,因为它需要引用实体和仓储接口.
-
注意:如果不需要使用MongoDB,可以删除此项目.
Test 项目:
解决方案有多个测试项目,每一层都会有一个:
- .Domain.Tests 用于测试领域层.
- .Application.Tests 用于测试应用层.
- .EntityFrameworkCore.Tests 用于测试EF Core配置与自定义仓储.
- .MongoDB.Tests 用于测试MongoDB配置与自定义仓储.
- .TestBase 所有测试项目的基础(共享)项目.
此外, .HttpApi.Client.ConsoleTestApp 是一个控制台应用程序(不是自动化测试项目),它用于演示DotNet应用程序中HTTP API的用法.
测试项目是用于做集成测试的:
- 它完全集成到ABP框架和应用程序的所有服务.
- 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用Mongo2Go库.
- 授权被禁用,任何的应用服务都可以在测试中轻松调用.
Host 项目:
- 解决方案中有一些宿主应用程序可以在开发时运行模块. 在开发时会很有用. 除了正在开发的模块外.
- 宿主应用程序包括其他模块:宿主应用程序支持两种类型的场景.
如何运行ABP .vNext 项目?
- 将 host/YourProjectName.Web.Unified设置成启动项, 使用包管理控制台运行 Update-Database 命令迁移数据库,然后运行应用程序.
-
默认用户名: admin
-
密码: 1q2w3E*.
分离部署&数据库 场景
ps:在这个场景中,有三个应用程序;
- .AuthServer 应用程序是其他应用程序使用的身份验证服务器,它有自己的 appsettings.json 包含数据库连接字符串和其他配置.
- .HttpApi.Host 托管模块的HTTP API. 它有自己的 appsettings.json 包含数据库连接字符串和其他配置.
- .Web.Host 托管模块的UI. 它包含 appsettings.json 文件, 但是其中没有数据库连接字符串, 因为它不需要连接到数据库, 它主要调用远程API服务器和身份认证服务器.
- .Web.Host 项目使用OpenId Connect身份认证从.AuthServer获取当前用户的身份和访问令牌. 然后使用访问令牌调用 .HttpApi.Host.
- HTTP API 服务器使用bearer token验证访问令牌获取当前用户声明并授权用户.
前置条件:
- Redis: 应用程序使用Redis做分布式缓存,你需要安装并运行Redis.
如何运行?
你需要按照以下顺序运行应用程序:
- 首先, 运行 .AuthServer,因为其他应用程序依赖它做身份认证.
- 然后运行 .HttpApi.Host,因为.Web.Host应用程序使用API接口.
- 最后运行 .Web.Host
- 使用用户名: admin 密码: 1q2w3E* 登录到应用程序.