初识 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项目:

 

三、生成项目

 

 以下会对整个项目目录文件做一个解读: 

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*  登录到应用程序.

 

 
posted @ 2022-12-09 14:47  lwqblog  阅读(706)  评论(0编辑  收藏  举报