当前位置: 首页 > news >正文

ABP vNext 基础四层

ABP vNext Nuget 包的介绍

ABP Framework(尤其是 ABP vNext)的官方 NuGet 包以 Volo.Abp.XXX 命名,覆盖了框架核心功能、模块、集成组件等多个层面。这些包按功能可分为核心基础设施应用层组件数据访问身份认证与授权UI 集成第三方集成等类别。以下是主要官方包的作用说明:

一、核心基础设施包

这些包是 ABP 框架的基础,提供模块化、依赖注入、配置等核心能力,几乎所有 ABP 应用都会依赖。

  1. Volo.Abp.Core
    • ABP 框架的核心包,包含模块系统(AbpModule)、依赖注入(IServiceCollection 扩展)、对象映射(IObjectMapper)、配置系统(IConfiguration 集成)、生命周期管理等基础功能。
    • 所有其他 ABP 包的基础依赖。
  2. Volo.Abp.Modularity
    • 单独封装 ABP 的模块化系统,定义模块加载、依赖管理、初始化 / 销毁流程的核心接口(如 IModuleDescriptorIModuleManager)。
    • 通常由 Volo.Abp.Core 间接引用,无需单独安装。
  3. Volo.Abp.Threading
    • 提供线程安全工具类(如 AsyncHelper 处理同步 / 异步转换)、并发锁(ILock)、分布式锁(IDistributedLock)等线程相关功能。
  4. Volo.Abp.Json
    • 封装 JSON 序列化 / 反序列化功能,基于 System.Text.JsonNewtonsoft.Json 扩展,支持 ABP 自定义类型(如 CultureInfoIPAddress)的序列化。
  5. Volo.Abp.Settings
    • 提供应用级设置(Settings)管理功能,支持从数据库、配置文件等多源读取设置,以及设置的缓存、验证和权限控制。
  6. Volo.Abp.Localization
    • 本地化(多语言)核心包,支持资源文件(JSON/XML)、数据库存储本地化文本,提供 ILocalizationManager 等接口简化多语言开发。
  7. Volo.Abp.Exceptions
    • 定义 ABP 标准异常类型(如 UserFriendlyExceptionBusinessException),以及异常处理管道,支持自动转换异常为 API 友好的错误响应。

二、应用层组件

用于构建应用服务(Application Service)、领域层(Domain)、数据传输对象(DTO)等核心业务逻辑层。

  1. Volo.Abp.Ddd.Application
    • 领域驱动设计(DDD)中应用层的核心包,提供 IApplicationService 接口、DTO 验证([ValidateModel])、工作单元(IUnitOfWork)集成等。
    • 依赖 Volo.Abp.Ddd.DomainVolo.Abp.ObjectMapping
  2. Volo.Abp.Ddd.Domain
    • DDD 领域层核心包,包含实体(Entity)、值对象(ValueObject)、聚合根(AggregateRoot)、领域事件(IDomainEvent)、仓储(IRepository)等基础类型。
  3. Volo.Abp.ObjectMapping
    • 对象映射抽象层,支持与 AutoMapper 等映射库集成,提供 IObjectMapper 接口统一映射 API,简化 DTO 与实体的转换。
  4. Volo.Abp.Validation
    • 封装数据验证功能,基于 DataAnnotationsFluentValidation 扩展,支持自定义验证器和全局验证管道。
  5. Volo.Abp.Uow
    • 工作单元(Unit of Work)核心包,管理数据库事务的创建、提交、回滚,支持多数据库事务协调,默认集成 EF Core 和 MongoDB。

三、数据访问包

提供与各类数据库的集成,封装仓储(Repository)接口和实现。

  1. Volo.Abp.EntityFrameworkCore
    • 集成 Entity Framework Core(EF Core)的核心包,提供 EfCoreRepository 实现,支持 EF Core 的数据库上下文(DbContext)与 ABP 模块系统结合。
  2. Volo.Abp.EntityFrameworkCore.SqlServer
    • 针对 SQL Server 数据库的 EF Core 集成包,包含特定配置(如连接字符串处理、迁移工具)。
    • 类似包:Volo.Abp.EntityFrameworkCore.MySQLVolo.Abp.EntityFrameworkCore.PostgreSql 等(对应不同数据库)。
  3. Volo.Abp.MongoDB
    • 集成 MongoDB 的核心包,提供 MongoRepository 实现,支持 MongoDB 集合与 ABP 仓储接口的适配。
  4. Volo.Abp.Dapper
    • 集成 Dapper 微型 ORM 的包,提供 DapperRepository 实现,支持原生 SQL 查询,可与 EF Core 共存。

四、身份认证与授权

处理用户认证、权限管理、角色控制等安全相关功能。

  1. Volo.Abp.Identity.Core
    • 身份认证核心包,基于 ASP.NET Core Identity 扩展,提供用户(IdentityUser)、角色(IdentityRole)管理的领域层和应用层接口。
  2. Volo.Abp.Identity.HttpApi
    • 身份认证模块的 HTTP API 包,暴露用户 / 角色管理的 API 接口(如 /api/identity/users),供前端调用。
  3. Volo.Abp.PermissionManagement
    • 权限管理核心包,定义权限(Permission)模型、权限检查器(IPermissionChecker),支持从数据库动态管理权限。
  4. Volo.Abp.Authorization
    • 授权体系核心包,基于 ASP.NET Core Authorization 扩展,提供 [Authorize] 特性的增强,支持 ABP 权限与角色的集成。
  5. Volo.Abp.TenantManagement
    • 多租户(Multi-Tenancy)核心包,提供租户(Tenant)管理、租户隔离(如数据库隔离)、租户分辨率(ITenantResolver)等功能。

五、UI 集成包

针对不同 UI 框架(如 MVC、Blazor、Angular)的集成支持。

  1. Volo.Abp.AspNetCore.Mvc
    • 集成 ASP.NET Core MVC 的核心包,提供 MVC 控制器基类(AbpController)、视图本地化、路由扩展、API 版本控制等功能。
  2. Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared
    • ABP 主题系统的共享包,包含布局组件、样式基础、资源管理(CSS/JS)等,是所有 ABP 主题(如 LeptonX)的基础。
  3. Volo.Abp.AspNetCore.Components
    • 集成 ASP.NET Core Blazor(Server/WASM)的核心包,提供 Blazor 组件基类(AbpComponentBase)、本地化、依赖注入适配等。
  4. Volo.Abp.AspNetCore.Mvc.UI.Bootstrap
    • 集成 Bootstrap 样式库的包,提供 Bootstrap 组件的 Tag Helper(如 abp-button)和样式适配。

六、第三方集成包

集成主流第三方服务或工具。

  1. Volo.Abp.Caching
    • 缓存核心包,基于 IDistributedCache 扩展,支持内存缓存、Redis 缓存,提供缓存键管理、缓存失效策略。
  2. Volo.Abp.Redis
    • 集成 Redis 的包,提供 Redis 分布式缓存、分布式锁的实现,依赖 StackExchange.Redis
  3. Volo.Abp.Emailing
    • 邮件发送核心包,封装邮件服务(IEmailSender),支持 SMTP 配置,可集成 SendGrid 等第三方邮件服务。
  4. Volo.Abp.BackgroundJobs
    • 后台任务调度核心包,支持延迟任务、重试机制,可与 Hangfire、Quartz 等调度框架集成(需配合 Volo.Abp.BackgroundJobs.Hangfire 等包)。
  5. Volo.Abp.Swashbuckle
    • 集成 Swashbuckle(Swagger)的包,自动配置 API 文档,支持 ABP 模块的 API 分组、权限说明等。

七、其他常用包

  1. Volo.Abp.Auditing
    • 审计日志核心包,记录实体创建 / 修改信息(如 CreationTimeLastModifierUserId)、API 调用日志等。
  2. Volo.Abp.Features
    • 功能模块(Features)管理包,支持基于租户 / 用户启用 / 禁用功能(如 “付费功能” 开关),提供 [RequiresFeature] 特性。
  3. Volo.Abp.EventBus
    • 事件总线核心包,支持进程内事件(ILocalEventBus)和分布式事件(IDistributedEventBus),解耦模块间通信。
  4. Volo.Abp.MultiTenancy
    • 多租户基础包,定义租户接口(ITenant)、租户存储(ITenantStore),支持无租户、单租户、多租户模式切换。

AbpModule 模块化

一个 .csproj 应用程序可以有多个模块,但有一些重要的细节需要注意:

模块数量和类型

1. 一个启动模块(必须)

每个 ABP 应用程序必须有一个作为入口点的启动模块:

csharp// 在 Program.cs 中指定启动模块
builder.Services.AddApplication<YourStartupModule>();

2. 多个依赖模块(可选)

启动模块可以依赖多个其他模块:

csharp[DependsOn(typeof(AbpAspNetCoreMvcModule),typeof(AbpAutoMapperModule),typeof(YourDomainModule),typeof(YourApplicationModule),typeof(YourEntityFrameworkCoreModule)
)]
public class YourStartupModule : AbpModule
{// ...
}

实际示例

典型的分层模块结构:

csharp// 领域层模块
public class MyProjectDomainModule : AbpModule { }// 应用层模块
public class MyProjectApplicationModule : AbpModule 
{[DependsOn(typeof(MyProjectDomainModule))]// ...
}// Entity Framework Core 模块
public class MyProjectEntityFrameworkCoreModule : AbpModule
{[DependsOn(typeof(MyProjectDomainModule))]// ...
}// Web API 模块
public class MyProjectHttpApiModule : AbpModule
{[DependsOn(typeof(MyProjectApplicationModule),typeof(MyProjectEntityFrameworkCoreModule))]// ...
}// 启动模块
public class MyProjectHttpApiHostModule : AbpModule
{[DependsOn(typeof(MyProjectHttpApiModule))]// 这是实际在 Program.cs 中使用的模块
}

最佳实践

  1. 单一启动模块:每个应用程序只有一个入口模块
  2. 分层设计:按功能将模块分层(领域层、应用层、基础设施层等)
  3. 依赖明确:每个模块明确声明其依赖关系
  4. 关注点分离:每个模块负责特定的业务功能

总结

一个 .csproj 项目可以包含:

  • 1个启动模块(在 AddApplication<T>() 中指定)
  • 任意数量的依赖模块(通过 [DependsOn] 声明)
  • 通常有5-10个或更多模块,具体取决于应用的复杂性

这种设计使得 ABP 应用具有高度的模块化和可维护性。

项目创建规则

┌─────────────────┐
│   表现层/API层   │  (外层)
├─────────────────┤
│   应用层         │
├─────────────────┤
│   核心/基础设施层 │  ← 依赖 ← 
├─────────────────┤
│   领域层         │  (内层)
└─────────────────┘

视图层

创建一个模块 JobToDDDAPIModule.cs

using Microsoft.OpenApi.Models;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Modularity;namespace DDD_ABP初试
{[DependsOn(typeof(AbpAspNetCoreMvcModule))]public class JobToDDDAPIModule : AbpModule{public override void ConfigureServices(ServiceConfigurationContext context){context.Services.AddControllers();// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbucklecontext.Services.AddEndpointsApiExplorer();context.Services.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new OpenApiInfo{Title = "JobToDDD API",Version = "v1"});});}public override void OnApplicationInitialization(ApplicationInitializationContext context){var app = context.GetApplicationBuilder();// Configure the HTTP request pipeline.if (context.GetEnvironment().IsDevelopment()){app.UseSwagger();app.UseSwaggerUI(c =>{c.SwaggerEndpoint("/swagger/v1/swagger.json", "JobToDDD API v1");});}app.UseRouting(); // 添加路由中间件app.UseAuthorization();app.UseEndpoints(configure => configure.MapControllers());}}
}

image

领域层 Domain

│  DDD-ABP.Domain.csproj
│  JobToDddDmainModule.cs
├─DomainServices //领域服务(业务)
├─Entities	//实体
│      City.cs
├─EventHandlers //领域事件
└─Repositories	//仓储接口

导入

Volo.Abp.Ddd.Domain
Volo.Abp.Core

JobToDddDmainModule.cs

using Volo.Abp.Domain;
using Volo.Abp.Modularity;namespace DDD_ABP.Domain
{[DependsOn(typeof(AbpDddDomainModule))]public class JobToDddDomainModule: AbpModule{}
}

一个简单实体

namespace DDD_ABP.Domain.Entities
{public class City : Entity<Guid>{public string CityName { get; set; }}
}

在ABP框架中,实体类继承 Entity 类有以下几个重要原因:

  1. 基础设施支持
    • Entity 基类提供了ABP框架所需的基础设施,包括主键定义、审计属性、软删除等功能
    • 它为领域实体提供了与ABP ORM和其他子系统集成所需的基本能力
  2. 统一的标识符管理
    Entity<Guid> 提供了标准的主键定义方式
    • 支持不同的主键类型(如 int、long、Guid 等)
    • 统一了实体标识符的处理方式
  3. 内置功能集成
    • 自动集成审计功能(创建时间、修改时间等)
    • 支持软删除机制
    • 提供并发控制支持
    • 集成事件总线系统
  4. ORM兼容性
    • 与EF Core等ORM框架良好集成
    • 提供了ABP特有的数据过滤机制
    • 支持仓储模式的标准实现
  5. 约定优于配置
    • 遵循ABP框架的设计约定
    • 减少样板代码的编写
    • 提高开发效率和代码一致性

数据基础层 Core

1 导入

Volo.Abp.EntityFrameworkCore
Volo.Abp.EntityFrameworkCore.SqlServer
Volo.Abp.Core

2 引入领域层 DDD_ABP.Domain

3 创建Context

JobToDddContext.cs

namespace DDD_ABP.Core
{public class JobToDddContext : AbpDbContext<JobToDddContext>{public DbSet<City> Cities { get; set; }public JobToDddContext(DbContextOptions<JobToDddContext> options) : base(options){}}
}

4 创建

JobToDddCoreModule.cs

using DDD_ABP.Domain;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;namespace DDD_ABP.Core
{[DependsOn(typeof(AbpEntityFrameworkCoreModule),typeof(JobToDddDomainModule))]public class JobToDddCoreModule:AbpModule{public override void ConfigureServices(ServiceConfigurationContext context){/** ABP对比 AddDbContext 的写法,ABP方式 (AddAbpDbContext + AbpDbContextOptions)* •	自动仓储: options.AddDefaultRepositories() 为所有实体自动生成仓储实现•	ABP集成: 与ABP的依赖注入、UnitOfWork等系统无缝集成•	扩展性: 支持自定义仓储和覆盖默认行为*/context.Services.AddAbpDbContext<JobToDddContext>(options =>{/***  1.	AddDefaultRepositories方法1. includeAllEntities: false (默认)•	只为聚合根(Aggregate Root)实体生成仓储•	普通实体(仅继承自 Entity<>)不会生成仓储•	遵循DDD最佳实践原则2. includeAllEntities: true•	options.AddDefaultRepositories(includeAllEntities: true);•	为所有实体生成仓储(包括普通实体和聚合根)•	不区分实体类型,全部生成仓储实现•	适用于快速开发或简单应用场景2.	AddRepository方法•	添加自定义的仓储实现•	参数:实体类型和仓储实现类型*/options.AddDefaultRepositories(); });/***  1.	Configure方法•	这是ABP模块中用于配置选项的标准方法•	Configure<AbpDbContextOptions> 表示要配置 AbpDbContextOptions 这个配置类•	这种写法是ABP框架特有的配置方式2.	AbpDbContextOptions作用•	专门用于配置ABP的数据库上下文选项•	包含数据库提供程序、连接字符串等配置•	与标准的 DbContextOptions 相比,提供了更多ABP特有的功能3.	UseSqlServer方法•	指定使用SQL Server作为数据库提供程序•	ABP提供了多种数据库提供程序支持:•	UseSqlServer() - SQL Server•	UseMySql() - MySQL•	UsePostgreSql() - PostgreSQL•	UseOracle() - Oracle等*/Configure<AbpDbContextOptions>(options =>{options.UseSqlServer();});}}
}

5 配置 appsettings.json

添加 ConnectionStrings.Default,Default 是ABP 默认规则

{"ConnectionStrings": {"Default": "Service=127.0.0.1;database=XXXX;uid=XXX;pwd=XXX;"},"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*"
}

应用层 Application

1 导入

Volo.Abp.Core
Volo.Abp.AutoMapper

2 引入

Volo.Abp.Ddd.Application

3 JobToDddApplicationModule.cs

using DDD_ABP.Core;
using Volo.Abp.Application;
using Volo.Abp.AutoMapper;
using Volo.Abp.Modularity;namespace DDD_ABP.Application
{[DependsOn(typeof(AbpDddApplicationModule),typeof(AbpAutoMapperModule),typeof(JobToDddCoreModule) // 引用Core模块,因为引用了领域层 JobToDddDomainModule, 所以这里就不用导入项目层中的 DDD-ABP.Domain)]public class JobToDddApplicationModule: AbpModule{override public void ConfigureServices(ServiceConfigurationContext context){Configure<AbpAutoMapperOptions>(options =>{options.AddProfile<JobToDddProfile>();});}}
}

创建一个 automapper 配置文件

JobToDddProfile.cs

namespace DDD_ABP.Application
{internal class JobToDddProfile : Profile{public JobToDddProfile(){//举例:假设有一个领域实体 Job 和一个 DTO JobDto//CreateMap<Job, JobDto>();}}
}

其他工作

1 API 导入服务层,并且添加引用应用层模块

    //•	[DependsOn(...)]:声明该模块依赖的其他ABP模块,确保它们在当前模块之前初始化[DependsOn(typeof(AbpAspNetCoreMvcModule), //依赖ABP的ASP.NET Core MVC模块typeof(JobToDddApplicationModule) //依赖应用层模块)]public class JobToDDDAPIModule : AbpModule

2 视图模型数据 Dto

EntityDto

// 创建DTO - 无ID
public class CreateCityDto
{public string Name { get; set; }public string Code { get; set; }
}// 更新DTO - 有ID
public class UpdateCityDto : EntityDto<Guid>
{public string Name { get; set; }public string Code { get; set; }
}// 输出DTO - 有ID
public class CityDto : EntityDto<Guid>
{public string Name { get; set; }public string Code { get; set; }
}
http://www.hskmm.com/?act=detail&tid=38208

相关文章:

  • 2025 年管道修补器源头厂家最新推荐排行榜:揭秘行业内具备全流程管控能力的靠谱厂商及优质产品选型指南加长/铸铁/弯头/卡箍式管道修补器公司推荐
  • 2025 年最新推荐!软件验收测试公司最新排行榜,揭秘具备 CMA/CNAS 资质的靠谱品牌可靠/权威/知名的软件验收测试公司推荐
  • Socket 编程 TCP(准备阶段) - 指南
  • 信号(Signal)、信号量(Semaphore)
  • 在线聊天室
  • 2025 年亚克力板材厂家联系方式推荐:江苏金穗技术工艺与工程案例解析,泳池 / 鱼缸 / 海洋馆解决方案
  • 2025 年 亚克力透明泳池厂家联系方式推荐:江苏金穗的技术积淀与工程服务优势解析
  • vue3+vite学习日记之配置全新项目
  • 2025 全案/VI/品牌设计公司服务商推荐:意识形体(上海意感)五星领跑,这些专注视觉价值的公司值得选
  • 2025 年水泥房厂家联系方式推荐,内蒙古蒙营新型建材提供预制水泥房及配套产品专业解决方案
  • 2025修护/二硫化硒去屑/香氛/控油蓬松/洗发水品牌推荐榜:MASIL 玛丝兰(西安悦己容)五星领衔,这些专研洗护品牌值得关注
  • 2025年Q345B/20G/5310/无缝钢管 高压/5310高压/6479高压合金管推荐榜:天津大无缝五星领跑,这些品质流通企业适配工业需求
  • 一网统管,智慧赋能:国标GB28181算法算力平台EasyGBS构建城市交通可视、巡检与指挥新范式
  • YouTube数据抓取漏洞利用与概念验证解析
  • 2025 年检查井厂家联系方式推荐,内蒙古蒙营新型建材提供专业检查井解决方案与可靠产品供应
  • oracle 控制文件
  • iOS 26 查看电池容量与健康状态 多工具组合的工程实践
  • 2025年纤维布袋风管厂家权威推荐榜单:保温布袋风管/修理厂布袋风管/防火布袋风管源头厂家精选
  • APUE学习笔记之文件与目录(四) - Invinc
  • 国标GB28181算法算力平台EasyGBS智慧果园一体化监控解决方案
  • 2025年新疆旅游攻略公司权威推荐榜单:旅游线路/新疆旅游/新疆禾木旅游源头公司精选
  • 2025 年离心风机源头厂家最新推荐榜:基于中国通用机械工业协会测评权威数据,精选优质品牌解决采购难题塑料/PP/通用/钛材离心风机公司推荐
  • Java使用Selenium自动化测试网盘链接是否失效
  • 完整教程:Django 中的元类(Metaclass)应用及生产场景示例
  • MongoDB 与其他数据库(如 Redis、Elasticsearch、PostgreSQL)对比
  • 一行命令让你修改博客上的粉丝数
  • 数据库分类详解
  • 2025年护栏厂家权威推荐榜单:不锈钢栏杆/桥梁防撞护栏/河道景观护栏,专业设计与安全防护全解析
  • 2025年发电机厂家推荐排行榜,发电机组出租,柴油发电机出租,甲醇发电机组租赁,移动式发电机出租,发电机组维修保养,专业可靠之选
  • Linux下的拼音输入法 (1)