ABP Framework 核心架構
架構概述
ABP Framework 基于模塊化、分層架構構建,遵循領域驅動設計(DDD)、依賴注入和 SOLID 原則,為構建可維護、可測試和可擴展的應用程序提供基礎。
核心模塊
ABP Core Module
Modularity System
Dependency Injection
Configuration System
Virtual File System
Validation
Localization
Event Bus
Multi-Tenancy
Domain-Driven Design Infrastructure
Unit of Work
Auditing
Background Jobs
Caching
Authentication/Authorization
Object to Object Mapping
數據訪問
ABP Core Module
Entity Framework Core
MongoDB
Dapper
UI 框架
ABP Core Module
ASP.NET Core MVC / Razor Pages
Angular
Blazor
MAUI Blazor
模塊化系統
ABP 框架建立在全面的模塊化系統之上,允許應用程序由松耦合、可重用的模塊組成。
模塊類
每個 ABP 模塊由一個派生自AbpModule
的類定義,作為模塊的入口點和配置容器。
IAbpModule
+ConfigureServices(ServiceConfigurationContext context)
IOnPreApplicationInitialization
+OnPreApplicationInitialization(ApplicationInitializationContext context)
+OnPreApplicationInitializationAsync(ApplicationInitializationContext context)
IOnPostApplicationInitialization
+OnPostApplicationInitialization(ApplicationInitializationContext context)
+OnPostApplicationInitializationAsync(ApplicationInitializationContext context)
IOnApplicationShutdown
+OnApplicationShutdown(ApplicationShutdownContext context)
+OnApplicationShutdownAsync(ApplicationShutdownContext context)
AbpModule
+ConfigureServices(ServiceConfigurationContext context)
+OnPreApplicationInitialization(ApplicationInitializationContext context)
+OnApplicationInitialization(ApplicationInitializationContext context)
+OnPostApplicationInitialization(ApplicationInitializationContext context)
+OnApplicationShutdown(ApplicationShutdownContext context)
DomainModule
+ConfigureServices(ServiceConfigurationContext context)
ApplicationModule
+ConfigureServices(ServiceConfigurationContext context)
HttpApiModule
+ConfigureServices(ServiceConfigurationContext context)
EntityFrameworkCoreModule
+ConfigureServices(ServiceConfigurationContext context)
模塊依賴
模塊可以使用[DependsOn]
屬性依賴于其他模塊,形成依賴圖以確保模塊按正確順序初始化。
典型模塊層
權限模塊
身份模塊
數據訪問模塊
核心模塊
Domain.Shared
Domain
Application
Application.Contracts
HttpApi
Web
EntityFrameworkCore
MongoDB
HttpApi.Client
Volo.Abp.PermissionManagement.Domain
Volo.Abp.Identity.Domain
Volo.Abp.Identity.EntityFrameworkCore
Volo.Abp.Identity.MongoDB
Volo.Abp.EntityFrameworkCore
Volo.Abp.MongoDB
Volo.Abp.Core
Volo.Abp.MultiTenancy
Volo.Abp.Data
Volo.Abp.EventBus
Volo.Abp.Users
模塊生命周期
模塊遵循特定的生命周期,允許在應用程序的各個階段執行代碼:
Application ModuleManager ModuleA ModuleB StartAsync() ConfigureServices() Complete Configuration ConfigureServices() Complete Configuration OnPreApplicationInitialization() Complete Pre-Initialization OnPreApplicationInitialization() Complete Pre-Initialization OnApplicationInitialization() Complete Initialization OnApplicationInitialization() Complete Initialization OnPostApplicationInitialization() Complete Post-Initialization OnPostApplicationInitialization() Complete Post-Initialization StopAsync() OnApplicationShutdown() Complete Shutdown OnApplicationShutdown() Complete Shutdown Application ModuleManager ModuleA ModuleB
分層架構
ABP 框架采用清晰的分層架構,遵循領域驅動設計原則:
基礎設施層 (Infrastructure Layer)
領域層 (Domain Layer)
應用層 (Application Layer)
表現層 (Presentation Layer)
Entity Framework Core
MongoDB
Caching
Email Service
File Storage
Entities / Aggregates
Domain Services
Repositories
Domain Events
Value Objects
Application Services
Data Transfer Objects
Application Events
Web / MVC
HTTP API
Blazor UI
Angular UI
各層職責
領域層 :應用程序的核心,包含業務對象、規則和邏輯,技術無關,不依賴其他層應用層 :協調任務并將工作委托給領域對象,不包含業務規則或知識基礎設施層 :為高層提供技術能力支持,如數據庫持久化、消息傳遞等表現層 :負責向用戶展示信息并解釋用戶命令,支持多種 UI 框架
依賴注入系統
ABP 框架擴展了 ASP.NET Core 的依賴注入系統,增加了額外功能和約定。
Dependency Injection
DI Attributes
Registration Conventions
Lifetime Registration
Dependency
Transient
Scoped
Singleton
ExposeServices
IServiceCollection
ABP ServiceRegistrar
Transient
Scoped
Singleton
Exposed Services
Default Interfaces
Self and Base
Just Self
注冊方式示例
public class MyService : ITransientDependency
{
}
public class MyDbContext : IScopedDependency
{
}
public class MyCacheManager : ISingletonDependency
{
}
[ Dependency ( ServiceLifetime. Transient) ]
public class MyService
{
}
[ Transient ]
public class AnotherService
{
}
應用啟動架構
ABP 應用程序遵循特定的啟動流程,配置和初始化模塊和服務:
ABP ApplicationHost Builder ABP Modules Services CreateDefaultBuilder() ConfigureWebHostDefaults() AddApplication<StartupModule>() Create Module Loader Discover Module Dependencies Sort Modules by Dependencies Build() Initialize() ConfigureServices() for each module Register Services OnPreApplicationInitialization() for each module OnApplicationInitialization() for each module OnPostApplicationInitialization() for each module Run() ABP ApplicationHost Builder ABP Modules Services
多租戶架構
ABP 提供內置的多租戶系統,允許應用程序為多個租戶(客戶)提供服務,并實現適當的數據隔離:
Tenant-Dependent Services
Data Filtering
Tenant Resolution Strategies
Multi-Tenancy Infrastructure
Connection Strings
Settings
Features
Cache
Multi-Tenant Filter
Data Filters
Soft Delete Filter
Domain Resolver
Header Resolver
Cookie Resolver
Query String Resolver
Tenant Manager
Tenant Store
Tenant Resolver
Current Tenant Accessor
橫切關注點
ABP 以模塊化方式處理橫切關注點,如異常處理、驗證和授權:
Cross-Cutting Concerns
Application Services
Infrastructure
Controllers
Validation
Authorization
Exception Handling
Auditing
Unit of Work
Caching
Event Bus
Object Mapping
Application Service
Filters
Middleware
Dynamic Proxy
Interceptors
API Controller
數據庫抽象層
ABP 提供數據庫抽象層,支持多個數據庫提供程序,同時保持一致的 API:
Database Providers
Repository Pattern
Unit of Work
Entity Framework Core
MongoDB
Dapper
IRepository
IBasicRepository
EfCoreRepository
MongoDbRepository
UnitOfWorkManager
UnitOfWorkAttribute
IUnitOfWork