2 Abp 框架核心架構

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

模塊生命周期

模塊遵循特定的生命周期,允許在應用程序的各個階段執行代碼:

ApplicationModuleManagerModuleAModuleBStartAsync()ConfigureServices()Complete ConfigurationConfigureServices()Complete ConfigurationOnPreApplicationInitialization()Complete Pre-InitializationOnPreApplicationInitialization()Complete Pre-InitializationOnApplicationInitialization()Complete InitializationOnApplicationInitialization()Complete InitializationOnPostApplicationInitialization()Complete Post-InitializationOnPostApplicationInitialization()Complete Post-InitializationStopAsync()OnApplicationShutdown()Complete ShutdownOnApplicationShutdown()Complete ShutdownApplicationModuleManagerModuleAModuleB

分層架構

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 BuilderABP ModulesServicesCreateDefaultBuilder()ConfigureWebHostDefaults()AddApplication<StartupModule>()Create Module LoaderDiscover Module DependenciesSort Modules by DependenciesBuild()Initialize()ConfigureServices() for each moduleRegister ServicesOnPreApplicationInitialization() for each moduleOnApplicationInitialization() for each moduleOnPostApplicationInitialization() for each moduleRun()ABP ApplicationHost BuilderABP ModulesServices

多租戶架構

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93018.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring的高頻基礎面試題(二)

1. 線程池創建的作用是什么 ? 線程池的核心參數有哪些 ? 線程池執行任務的流程 ?作用&#xff1a;提高線程的復用性&#xff0c;降低損耗資源。核心參數&#xff1a;核心線程 、最大線程數 、等待空閑時間、時間單位、任務隊列、線程工廠、拒絕策略執行流程&#xff1a; 首…

【JavaEE】(12) 創建一個 Sring Boot 項目

一、Maven 1、什么是 Maven Maven 用于管理項目、管理依賴&#xff08;通過 POM 文件配置各種各樣的 jar 包&#xff09;。 在沒有 Maven 之前&#xff0c;需要手動將 jar 包導入項目。整個流程&#xff1a;從網上查 jar 包并下載到本地&#xff08;或者叫同事發&#xff09;&…

最終章【1】Epson機器人篇

1,開發環境 Epson RC 7.5.1 RC90控制器 2,條件分支指令 2.1,If...EndIf,邏輯判斷分支 語法格式: If 條件1 Then 處理邏輯1................ ElseIf 條件2 Then 處理邏輯2................ Else 處理邏輯3................ EndIf 例子: String order$If ord…

vue3 實現web網頁不同分辨率適配

vue3 實現web網頁不同分辨率適配首先這個標題可能不是特別的合適&#xff0c;之前開發了一個網站&#xff0c;那個網站是類似于官網的效果&#xff0c;按照 19201080100% 的分辨率進行開發的&#xff0c;但是在開發完成之后&#xff0c;發現有的電腦是 19201080125% 的大小展示…

電子電路原理學習筆記---第5章特殊用途二極管---第2天

5.5閱讀數據手冊圖5-15給出了1N957B和1N4728A系列的齊納二極管數據手冊中的數據&#xff0c;再后面的討論中將參考這些數據。數據手冊中大部分信息是提供給電路設計者的&#xff0c;但有些內容在故障診斷和測試時也有必要了解。5.5.1最大功率齊納二極管的功率等于它對應的電壓與…

實現一個二維碼讓 iOS 和 Android 用戶自動跳轉到對應下載鏈接

實現一個二維碼讓 iOS 和 Android 用戶自動跳轉到對應下載鏈接 背景 開發一個APP后&#xff0c;需要分發Android測試包和iOS TestFlight的場景&#xff0c;但為兩個端分別生成二維碼&#xff0c;需要為二維碼標識系統以免導致用戶掃錯碼。如何實現一個二維碼讓 iOS 和 Androi…

Docker中ES安裝分詞器

1、下載好的文件上傳到虛擬機或者云服務器 https://release.infinilabs.com/analysis-ik/stable/ elasticsearch-analysis-ik-8.10.4.zip 2、將本地 ZIP 文件復制到容器內的臨時目錄&#xff08;如 /tmp/&#xff09; docker cp /data/elasticsearch-analysis-ik-8.10.4.zip e…

掌握while循環:C語言編程基礎

目錄 一、while循環簡介 二、if和while的對比 語法結構對比&#xff1a; 實際代碼對比&#xff1a; 三、while語句的執行流程 while循環的執行流程如下&#xff1a; 流程圖表示&#xff1a; 四、while循環實踐 練習&#xff1a;在屏幕上打印1~10的值 五、進階練習 題…

XML Schemas 簡介

XML Schemas 簡介 引言 XML(可擴展標記語言)是互聯網上用于數據交換的一種標準標記語言。隨著互聯網技術的飛速發展,XML因其靈活性和可擴展性而被廣泛應用于各種領域。XML Schemas(XML模式)作為一種定義XML文檔結構的機制,為XML文檔提供了嚴格的規范,確保了數據的準確…

Gradle(二)Gradle的優勢、項目結構介紹

目錄一、什么是 Gradle&#xff1f;二、為什么選擇 Gradle&#xff1f;三、Gradle 的項目結構3.1 項目結構3.2 gradle wrapper 包裝器3.3 settings.gradle 設置文件3.4 build.gradle 核心構建文件1&#xff09;原始文件內容2&#xff09;plugins 插件3&#xff09;repositories…

機器學習-決策樹(上)

決策樹構建&#xff1a; 決策樹的結構與python中的二叉樹結構(PY數據結構-樹)相似&#xff0c;不過決策樹中除了葉節點之外的其他節點&#xff0c;都被稱之為“決策節點”&#xff0c;構建決策樹的過程&#xff0c;也就是選取每一個節點采用哪一個特征作為劃分依據的過程。 以…

一周學會Matplotlib3 Python 數據可視化-繪制直方圖(Histogram)

鋒哥原創的Matplotlib3 Python數據可視化視頻教程&#xff1a; 2026版 Matplotlib3 Python 數據可視化 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程講解利用python進行數據可視化 科研繪圖-Matplotlib&#xff0c;學習Matplotlib圖形參數基本設置&…

uni-app之刪除沒用的文件,搭建頁面

文章目錄一、初始化項目1.1 初始化index.vue1.2 刪除無用文件1.3 初始化后的目錄結果如下二、文件目錄分析2.1 核心文件2.2 關鍵文件夾?2.3 其他文件2.4 注意事項??三、創建頁面(pages)3.1 創建home頁面3.2 創建其他頁面3.3 查看pages.json3.4 刪除index頁面和pages.json的配…

99、【OS】【Nuttx】【構建】cmake 配置實操:問題解決

【聲明】本博客所有內容均為個人業余時間創作&#xff0c;所述技術案例均來自公開開源項目&#xff08;如Github&#xff0c;Apache基金會&#xff09;&#xff0c;不涉及任何企業機密或未公開技術&#xff0c;如有侵權請聯系刪除 背景 接之前 blog 【OS】【Nuttx】【構建】cm…

2007-2023年各省環境保護支出統計數據

數據介紹 環境保護支出是指政府和企業為改善生態環境質量、防治污染、保護自然資源所投入的資金&#xff0c;涵蓋污染防治、生態修復、環境管理等多方面。污染防治支出、生態保護支出、環境管理事務、資源節約與循環利用等&#xff0c;當前環保支出仍面臨區域不平衡、隱性債務…

PyCharm(2025.1.3.1)綁定 Conda 環境

1. Pycharm 右下角&#xff0c;選擇&#xff08; 如圖所示 &#xff09;2. Path to conda 這里選擇如圖所示的這個文件&#xff08; 在你下載的 Anaconda 文件里 &#xff09;&#xff0c;之后在 Enviroment 中就可以看到你新創建的環境了

Liunx文件系統詳解

目錄 1.磁盤 1.1 概念 1.2 磁盤物理結構 1.3 磁盤的存儲結構 1.4 磁盤的邏輯結構 1.5 CHS && LBA地址 2.基礎文件系統 2.1 塊 ?編輯 2.2 分區 2.3 inode 3.ext2 ?件系統 3.1 宏觀認識 3.2 Block Group 3.3塊組內部構成 3.3.1 超級塊&#xff08;Supe…

Mac如何安裝telnet命令

Mac如何安裝telnet命令_mac telnet-CSDN博客

【SpringBoot】持久層 sql 注入問題

目錄 概述 #{} 與 ${} 概述 前端惡意傳參&#xff0c;改變后端 sql 語句的語法結構&#xff0c;從而使后端給前端返回一些私密的數據。這種安全問題往往是因為沒有嚴格過濾參數&#xff0c;或者后端代碼不嚴謹導致的。 #{} 與 ${} 在 MyBatis 框架中&#xff0c;#{} 與 ${} 都…

怎么寫好漢語言文學專業的論文?

磨刀不誤砍柴功&#xff0c; 前期多看文章和文獻&#xff0c;吸取寫作經驗&#xff0c;寫作過程會更加順利噢&#xff01;看到最后&#xff0c;相信你能得到收獲&#xff01; 寫漢語言專業論文并不難&#xff0c;從選題、資料準備、框架搭建、正文寫作、修改定稿五個核心環節展…