ABP原始碼分析四十:ZERO的Application和Tenant
ABP的Zero模組以資料庫為資料來源實現了ABP框架中的tenant management (multi-tenancy), role management, user management, session, authorization (permission management), setting management, language management, audit logging等核心功能。ABP中的這些功能具體實現都依賴外部的持久層,所以ABP框架中僅僅定義了介面和一些空的實現。而對這些功能真正的實現則交給Zero這類模組。
Zero模組主要的程式碼也很簡單,就是針對這些功能模組的領域邏輯的實現,所以無非就是定義實體,實體關係,以及相關的CRUD操作。
Edition:繼承自FullAuditedEntity實體類。表示一個application的版本。下圖表示其去另外兩個Entity的關係。
EditionFeatureSetting:繼承自FeatureSetting。表示一個與具體Edition關聯的Feature
FeatureSetting:繼承自CreationAuditedEntity<long>的實體類。 封裝了FeatureSetting的name和value
AbpTenant:繼承自FullAuditedEntity實體類。表示Tenant.
AbpEditionManager
這裡要注意AbpEditionManager例項了兩個事件處理器的介面,用於響應Edition以及EditionFeatureSetting發生改變時觸發的事件。這邊的具體事件處理函式完成將Edition以及EditionFeatureSetting例項從快取中刪除。
EditionfeatureCacheItem:這個類例項被用於快取,其字典集合FeatureValues用於儲存與某個edition對應的FeatureSetting。
AbpFeatureValueStore:這是一個抽象基類。其提供了一個方法GetValueOrNullAsync根據tenant的指定feature的值。該方法內部是通過呼叫AbpTenantManager的例項來完成的。如果feature和edition相關,還需要呼叫AbpEditionManager的相應方法來獲取feature的value.
TenantFeatureSetting:繼承自FeatureSetting。表示一個與具體Tenant關聯的Feature
TenantFeatureCacheItem:與EditionfeatureCacheItem相似。這個類例項被用於快取,其字典集合FeatureValues用於儲存與某個Tenant對應的FeatureSetting。
TenantFeatureCacheItemInvalidator:實現了IEventHandler介面中的HandleEvent方法,以相應TenantFeatureSetting實體物件發生變化時,將其從快取中刪除。
IMustHaveTenant:該介面標識其Entity與tenant有關聯關係,但是這關聯關係是必須的。
IMayHaveTenant :該介面標識其Entity與tenant有關聯關係,但是這關聯關係不是必須的。
AbpTenantManager:處理與Tenant相關的鄰域邏輯。其引用了兩個物件:TenantRepository 和TenantFeatureRepository(IRepository<Tenant>和 IRepository<TenantFeatureSetting, long> 的例項,圖中用紅色標註)。AbpEditionManager通過TenantRepository 例項完成Tenant的CRUD操作,通過TenantFeatureRepository完成TenantFeatureSetting 例項的CRUD操作。
這裡要注意AbpTenantManager例項了兩個事件處理器的介面,用於響應Tenant以及Edition發生改變時觸發的事件。這邊的具體事件處理函式完成將Tenant以及EditionFeatureSetting例項從快取中刪除。
相關推薦
ABP原始碼分析四十:ZERO的Application和Tenant
ABP的Zero模組以資料庫為資料來源實現了ABP框架中的tenant management (multi-tenancy), role management, user management, session, authorization (permission management), setting m
ABP原始碼分析四十二:ZERO的身份認證
ABP Zero模組通過自定義實現Asp.Net Identity完成身份認證功能, 對Asp.Net Identity做了較大幅度的擴充套件。同時重寫了ABP核心模組中的permission功能,以實現授權。注意:ABP僅僅使用了Asp.Net Identity的身份認證功能,但沒有使用Asp.Net Id
ABP原始碼分析四十一:ZERO的Audit,Setting,Background Job
AuditLog: 繼承自Entity<long>的實體類。封裝AuditLog的資訊。 AuditingStore: 實現了IAuditingStore介面,實現了將AuditLog的資訊儲存到資料庫的功能。其通過IRepository<AuditLog, long>例項完成對資料
ABP原始碼分析四十四:ZERO的配置
ABP Zero模組中需要配置的地方主要集中在三塊:配置靜態的role,配置外部認證源,以及配置本地化語言和資源。 UserManagementConfig/IUserManagementConfig:定義了一個配置項,用於配置外部認證源。預設情況下,ABP Zero使用AbpUser表作為身份
ABP原始碼分析四十七:ABP中的異常處理
ABP 中異常處理的思路是很清晰的。一共五種型別的異常類。 AbpInitializationException用於封裝ABP初始化過程中出現的異常,只要丟擲AbpInitializationException異常就可以,無須做額外處理。這類異常往往是需要維護人員介入分析的。 其他四個異常都在AbpCon
ABP原始碼分析四十三:ZERO的本地化
ABP Zero模組擴充套件了ABP基礎框架中的本地化功能,實現了通過資料庫管理本地化的功能。其通過資料庫儲存本地化語言及其資源。 ApplicationLanguage:代表本地化語言的實體類。一種語言就是一個ApplicationLanguage例項。 ApplicationLanguag
ABP原始碼分析二十:ApplicationService
IApplicationService : 空介面,起標識作用。所有實現了IApplicationService 的類都會被自動注入到容器中。同時所有IApplicationService物件都會被注入一些攔截器(例如:auditing, UnitOfWork等)以實現AOP AbpServiceBase:
ABP原始碼分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模組主要完成兩個任務: 第一,通過自定義的AbpController抽象基類封裝ABP核心模組中的功能,以便利的方式提供給我們建立controller使用。 第二,一些常見的基礎功能的實現。 AbpController:這是一個抽象基類,繼承自MVC Controller,是A
ABP原始碼分析二十四:Notification
NotificationDefinition: 用於封裝Notification Definnition 的資訊。注意和Notification 的區別,如果把Notification看成是具體的訊息內容,NotificationDefinition則是對這個訊息自身的定義(可理解為訊息的型別)。
ABP原始碼分析二十六:核心框架中的一些其他功能
本文是ABP核心專案原始碼分析的最後一篇,介紹一些前面遺漏的功能 AbpSession AbpSession: 目前這個和CLR的Session沒有什麼直接的聯絡。當然可以自定義的去實現IAbpSession使之與CLR的Session關聯 IAbpSession:定義如下圖中的四個屬性。 NullA
ABP原始碼分析三十一:ABP.AutoMapper
這個模組封裝了Automapper,使其更易於使用。 下圖描述了改模組涉及的所有類之間的關係。 AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttribute:這三個attribute用於標註一個類到另外一個類的map方向。 Auto
ABP原始碼分析二十九:ABP.MongoDb
這個Module通過建立一個MongoDbRepositoryBase<TEntity> 基類,封裝了對MongoDb資料庫的操作。 這個module通過引用MongoDB.Driver,MongoDB.Bson,MongoDB.Driver.Core,MongoDB.Driver.Legacy類
ABP原始碼分析二十七:ABP.Entity Framework
IRepository:介面定義了Repository常見的方法 AbpRepositoryBase:實現了IRepository介面的常見方法 EfRepositoryBase:實現了AbpRepositoryBase中定義的抽象方法:GetAll,Insert,Delete,Update。在實
ABP原始碼分析二十五:EventBus
IEventData/EventData: 封裝了EventData資訊,觸發event的源物件和時間 IEventBus/EventBus: 定義和實現了了一系列註冊,登出和觸發事件處理函式的方法。EventBus定義了一個Dictionary容器來存放事件和處理該事件的物件(其實不是物件而是Factor
ABP原始碼分析二十二:Navigation
MenuDefinition:封裝了導航欄上的主選單的屬性。 MenuItemDefinition:封裝了主選單的子選單的屬性。子選單可以引用其他子選單構成一個選單樹 UserMenu/UserMenuItem:封裝了用於顯示給使用者的選單/以及子選單集合。 ABP通過MenuDefinition/M
ABP原始碼分析三十六:ABP.Web.Api
這裡的內容和ABP 動態webapi沒有關係。除了動態webapi,ABP必然是支援使用傳統的webApi。ABP.Web.Api模組中實現了一些同意的基礎功能,以方便我們建立和使用asp.net webApi。 AbpApiController:這是一個抽象基類,繼承自ApiController,是AB
ABP原始碼分析三十五:ABP中動態WebAPI原理解析
動態WebAPI應該算是ABP中最Magic的功能之一了吧。開發人員無須定義繼承自ApiController的類,只須重用Application Service中的類就可以對外提供WebAPI的功能,這應該算是對DRY的最佳詮釋了. 如下圖所示,一行程式碼就為所有實現了IApplicationService的
ABP原始碼分析三十二:ABP.SignalR
Realtime Realtime是ABP底層模組提供的功能,用於管理線上使用者。它是使用SignalR實現給線上使用者傳送通知的功能的前提 IOnlineClient/OnlineClient: 封裝線上使用者的資訊 OnlineClientManager/IOnlineClientManager:
ABP原始碼分析二十一:Feature
Feature是什麼?Feature就是對function的分類方法,其與function的關係就比如Role和User的關係一樣。 ABP中Feature具有以下屬性: 其中最重要的屬性是name,用以表示feature的Identity,一個feature一個name. 一個Feature可以有一組子F
ABP原始碼分析四:Configuration
核心模組的配置 Configuration是ABP中設計比較巧妙的地方。其通過AbpStartupConfiguration,Castle的依賴注入,Dictionary物件和擴充套件方法很巧妙的實現了配置中心化。配置中心化是一個支援模組開發的框架必備功能。 ABP中核心功能模組中的一些功能的執行時的