🧠 基于 ABP vNext + CQRS + MediatR 构建高可用与高性能微服务系统:从架构设计到落地实战
🧰 模块结构概览
Abp.CqrsDemo
├── src
│ ├── Abp.CqrsDemo.Domain
│ ├── Abp.CqrsDemo.Application
│ ├── Abp.CqrsDemo.HttpApi
│ └── Abp.CqrsDemo.DbMigrator
└── tests
└── Abp.CqrsDemo.Tests
- Domain:实体、聚合根、领域事件、仓储接口
- Application:命令、查询、MediatR 处理器、DTO、Pipeline Behaviors、CacheKeys
- HttpApi:控制器、外部配置绑定
- DbMigrator:数据库初始化与迁移工具
📦 各模块注册代码示例
DomainModule
[DependsOn(typeof(AbpDddDomainModule))]
public class CqrsDemoDomainModule : AbpModule
{
}
ApplicationModule
[DependsOn(typeof(CqrsDemoDomainModule))]
public class CqrsDemoApplicationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddMediatR(typeof(CqrsDemoApplicationModule).Assembly);
context.Services.AddValidatorsFromAssembly(typeof(CqrsDemoApplicationModule).Assembly);
context.Services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
context.Services.AddTransient(typeof(IPipelineBehavior<,>), typeof(LoggingBehavior<,>));
context.Services.AddDistributedCache<OrderDto>();
}
}
HttpApiModule
[DependsOn(typeof(CqrsDemoApplicationModule))]
public class CqrsDemoHttpApiModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
context.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = configuration["Redis:Connection"];
});
context.Services.AddControllers();
}
}
DbMigratorModule
[DependsOn(typeof(AbpEntityFrameworkCoreModule))]
public class CqrsDemoDbMigratorModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAbpDbContext<CqrsDemoDbContext>(options =>
{
options.AddDefaultRepositories(includeAllEntities: true);
});
Configure<AbpDbContextOptions>(options =>
{
options.UseSqlServer();
});
}
}
🧱 架构图 & 概念说明