1. 程式人生 > >ABP原始碼分析二十四:Notification

ABP原始碼分析二十四:Notification

NotificationDefinition: 用於封裝Notification Definnition 的資訊。注意和Notification 的區別,如果把Notification看成是具體的訊息內容,NotificationDefinition則是對這個訊息自身的定義(可理解為訊息的型別)。

INotificationDefinitionManager:該介面定義根據name返回NotificationDefinition的一些方法

NotificationDefinitionManager: 單例物件,實現了INotificationDefinitionManager介面。NotificationDefinitionManager封裝了一個Dictionary<string, NotificationDefinition>字典物件用於存放NotificationDefinition。其Initialize方法完成所有NotificationDefinition的初始化和裝載。Initialize方法從NotificationConfiguration讀取NotificationProvider以裝載NotificationDefinition到他的私有的IDictionary容器中。其實現的手法和Feature,Navigation以及Authorization是一致的

INotificationDefinitionContext/NotificationDefinitionContext: 上下文類,作為方法的引數。沒有特別的業務邏輯。這邊context只是封裝了INotificationDefinitionManager物件。

NotificationProvider: 抽象基類,用於向INotificationDefinitionManager物件(NotificationDefinitionManager)中新增NotificationDefinition. Abp框架只提供了抽象類,實際專案中可以建立自定義NotificationProvider來從資料庫中讀取NotificationDefinition來填充到NotificationDefinitionManager物件中。

INotificationConfiguration/NotificationConfiguration:提供給外部配置NotificationProvider。NotificationDefinitionManager通過具體的NotificationProvider來初始化和裝載Notification字典物件。但是ABP核心模組處於最底層,怎麼能知道上層定義的NotificationProvider的型別呢? NotificationConfiguration為解決這個問題引入了NotificationProvider配置項。NotificationProvider就是一個Type 列表 (ITypeList<NotificationProvider>),注意是NotificationProvider的Type,不是例項。在需要NotificationProvider的地方,可以使用容器根據Type構造出例項。

Notification:用於封裝Notification 的資訊。用作DTO而不是Entity

NotificationData: 用於儲存真正的Notification的資料(即內容)

NotificationInfo:用於封裝Notification的Entity.

INotificationStore:該介面提供持久化NotificationInfo的方法。NullNotificationStore是其空的實現。具體的實現留到外部的模組中。

INotificationPublisher/NotificationPublisher: 用於釋出Notification,首先呼叫INotificationStore例項進行例項化,接著分發Notification。如果有接收者並且接收者少於5個則直接呼叫INotificationDistributer進行分發,否則就把分發的任務加到後臺工作佇列中去。

UserNotificationInfo:用於封裝User和Notification關係的Entity.

UserNotification:用於封裝User和Notification關係的資訊。用作DTO而不是Entity

UserNotificationState: 表示UserNotification的狀態:讀和未讀

IUserNotificationManager/UserNotificationManager: 用於獲取,刪除UserNotification,以及更改UserNotification的狀態。

NotificationSubscriptionInfo:用於封裝notification 和subscriptor 的關係的Entity

NotificationSubscription:用於封裝封裝notification 和subscriptor(User) 的關係的DTO,不是Entity。

INotificationSubscriptionManager/NotificationSubscriptionManager: 用於獲取,刪除和新增NotificationSubscription。

NotificationSettingProvider:用於初始化Notification功能模組的Setting,Notification功能模組的唯一一項setting就是設定是否接收Notification。

INotificationDistributer/NotificationDistributer:用於分發Notification給User,也就是建立Notification和User的關係。在分發Notification給某個User前會檢查User的NotificationSetting,如果該設定為True就建立Notification和該User的關係

NotificationDistributionJob: 封裝了INotificationDistributer的後臺任務,當Notification的接收者超過5人時會,ABP將分發任務封裝為一個後臺執行任務,以減少使用者等待時間。5是被hardcode到原始碼中的。

相關推薦

ABP原始碼分析Notification

NotificationDefinition: 用於封裝Notification Definnition 的資訊。注意和Notification 的區別,如果把Notification看成是具體的訊息內容,NotificationDefinition則是對這個訊息自身的定義(可理解為訊息的型別)。

ABP原始碼分析核心框架中的一些其他功能

本文是ABP核心專案原始碼分析的最後一篇,介紹一些前面遺漏的功能 AbpSession AbpSession: 目前這個和CLR的Session沒有什麼直接的聯絡。當然可以自定義的去實現IAbpSession使之與CLR的Session關聯 IAbpSession:定義如下圖中的四個屬性。 NullA

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原始碼分析ABP.Web.Mvc

ABP.Web.Mvc模組主要完成兩個任務: 第一,通過自定義的AbpController抽象基類封裝ABP核心模組中的功能,以便利的方式提供給我們建立controller使用。 第二,一些常見的基礎功能的實現。 AbpController:這是一個抽象基類,繼承自MVC Controller,是A

ABP原始碼分析Feature

Feature是什麼?Feature就是對function的分類方法,其與function的關係就比如Role和User的關係一樣。 ABP中Feature具有以下屬性: 其中最重要的屬性是name,用以表示feature的Identity,一個feature一個name. 一個Feature可以有一組子F

ABP原始碼分析ABP.MemoryDB

這個模組簡單,且無實際作用。一般實際專案中都有用資料庫做持久化,用了資料庫就無法用這個MemoryDB 模組了。原因在於ABP限制了UnitOfWork的型別只能有一個(前文以作介紹),一般用了資料庫的必然要注入efUnitOfWork. 而注入了efUnitOfWork就不能在注入MemoryDbUnitO

ABP原始碼分析ApplicationService

IApplicationService : 空介面,起標識作用。所有實現了IApplicationService 的類都會被自動注入到容器中。同時所有IApplicationService物件都會被注入一些攔截器(例如:auditing, UnitOfWork等)以實現AOP AbpServiceBase:

ABP原始碼分析Navigation

MenuDefinition:封裝了導航欄上的主選單的屬性。 MenuItemDefinition:封裝了主選單的子選單的屬性。子選單可以引用其他子選單構成一個選單樹 UserMenu/UserMenuItem:封裝了用於顯示給使用者的選單/以及子選單集合。 ABP通過MenuDefinition/M

ABP原始碼分析ABP.AutoMapper

這個模組封裝了Automapper,使其更易於使用。 下圖描述了改模組涉及的所有類之間的關係。 AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttribute:這三個attribute用於標註一個類到另外一個類的map方向。 Auto

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.Hangfire

ABP對HangFire的整合主要是通過實現IBackgroundJobManager介面的HangfireBackgroundJobManager類完成的。 HangfireBackgroundJobManager:實現了介面IBackgroundJobManager中的方法EnqueueAsync,通過

ABP原始碼分析ABP.Web.Api Script Proxy API

ABP提供Script Proxy WebApi為所有的Dynamic WebApi生成訪問這些WebApi的JQuery代理,AngularJs代理以及TypeScriptor代理。這些個代理就是javascript指令碼,通過這些代理可以簡單的訪問Dynamic webApi。 如下例項演示一個最基本的

ABP原始碼分析ABP.SignalR

Realtime Realtime是ABP底層模組提供的功能,用於管理線上使用者。它是使用SignalR實現給線上使用者傳送通知的功能的前提 IOnlineClient/OnlineClient: 封裝線上使用者的資訊 OnlineClientManager/IOnlineClientManager:

ABP原始碼分析ABP中配置的註冊和初始化

一般來說,ASP.NET Web應用程式的第一個執行的方法是Global.asax下定義的Start方法。執行這個方法前HttpApplication 例項必須存在,也就是說其建構函式的執行必然是完成了。 ABP開始的地方就是HttpApplication的建構函式。 如下圖一,Abp定義了一個繼承自Http

ABP原始碼分析十三Authorization

Permission:用於定義一個Permission,一個permission可以包含多個子Permission. PermissionDictionary:繼承自Dictionary<string, Permission>類,很明顯是一個用於儲存permission物件的字典。 I

Hulu機器學習問題與解答系列 | 隨機梯度下降法

叠代 -s nbsp xib 大量 步長 空間 圖片 ges Hulu優秀的作者們每天和公式抗爭,只為提升你們的技能,感動的話就把文章看完,然後哭一個吧。 今天的內容是 【隨機梯度下降法】 場景描述 深度學習得以在近幾年迅速占領工業界和學術界的高地,重要原因之一是數

Unity 六邊形地圖系列() 地區和侵蝕

原文地址:https://catlikecoding.com/unity/tutorials/hex-map/part-24/ 機翻+個人潤色 在地圖周圍加一圈水域。 將地圖分割成多個區域。 對懸崖進行侵蝕。 移動土地來平滑地形。 這是關於六邊形地圖的系列教程