【转】ABP源码分析二十四:Notification
NotificationDefinition: 用于封裝Notification Definnition 的信息。注意和Notification 的區(qū)別,如果把Notification看成是具體的消息內(nèi)容,NotificationDefinition則是對這個消息自身的定義(可理解為消息的類型)。
?
INotificationDefinitionManager:該接口定義根據(jù)name返回NotificationDefinition的一些方法
?
NotificationDefinitionManager: 單例對象,實現(xiàn)了INotificationDefinitionManager接口。NotificationDefinitionManager封裝了一個Dictionary<string, NotificationDefinition>字典對象用于存放NotificationDefinition。其Initialize方法完成所有NotificationDefinition的初始化和裝載。Initialize方法從NotificationConfiguration讀取NotificationProvider以裝載NotificationDefinition到他的私有的IDictionary容器中。其實現(xiàn)的手法和Feature,Navigation以及Authorization是一致的
?
INotificationDefinitionContext/NotificationDefinitionContext: 上下文類,作為方法的參數(shù)。沒有特別的業(yè)務(wù)邏輯。這邊context只是封裝了INotificationDefinitionManager對象。
?
NotificationProvider: 抽象基類,用于向INotificationDefinitionManager對象(NotificationDefinitionManager)中添加NotificationDefinition. Abp框架只提供了抽象類,實際項目中可以創(chuàng)建自定義NotificationProvider來從數(shù)據(jù)庫中讀取NotificationDefinition來填充到NotificationDefinitionManager對象中。
?
INotificationConfiguration/NotificationConfiguration:提供給外部配置NotificationProvider。NotificationDefinitionManager通過具體的NotificationProvider來初始化和裝載Notification字典對象。但是ABP核心模塊處于最底層,怎么能知道上層定義的NotificationProvider的類型呢? NotificationConfiguration為解決這個問題引入了NotificationProvider配置項。NotificationProvider就是一個Type 列表 (ITypeList<NotificationProvider>),注意是NotificationProvider的Type,不是實例。在需要NotificationProvider的地方,可以使用容器根據(jù)Type構(gòu)造出實例。
?
Notification:用于封裝Notification 的信息。用作DTO而不是Entity
NotificationData: 用于儲存真正的Notification的數(shù)據(jù)(即內(nèi)容)
?
NotificationInfo:用于封裝Notification的Entity.
?
INotificationStore:該接口提供持久化NotificationInfo的方法。NullNotificationStore是其空的實現(xiàn)。具體的實現(xiàn)留到外部的模塊中。
?
INotificationPublisher/NotificationPublisher: 用于發(fā)布Notification,首先調(diào)用INotificationStore實例進(jìn)行實例化,接著分發(fā)Notification。如果有接收者并且接收者少于5個則直接調(diào)用INotificationDistributer進(jìn)行分發(fā),否則就把分發(fā)的任務(wù)加到后臺工作隊列中去。
?
UserNotificationInfo:用于封裝User和Notification關(guān)系的Entity.
?
UserNotification:用于封裝User和Notification關(guān)系的信息。用作DTO而不是Entity
?
UserNotificationState: 表示UserNotification的狀態(tài):讀和未讀
?
IUserNotificationManager/UserNotificationManager: 用于獲取,刪除UserNotification,以及更改UserNotification的狀態(tài)。
?
NotificationSubscriptionInfo:用于封裝notification 和subscriptor 的關(guān)系的Entity
?
NotificationSubscription:用于封裝封裝notification 和subscriptor(User) 的關(guān)系的DTO,不是Entity。
?
INotificationSubscriptionManager/NotificationSubscriptionManager: 用于獲取,刪除和添加NotificationSubscription。
?
NotificationSettingProvider:用于初始化Notification功能模塊的Setting,Notification功能模塊的唯一一項setting就是設(shè)置是否接收Notification。
?
?
INotificationDistributer/NotificationDistributer:用于分發(fā)Notification給User,也就是建立Notification和User的關(guān)系。在分發(fā)Notification給某個User前會檢查User的NotificationSetting,如果該設(shè)置為True就建立Notification和該User的關(guān)系
NotificationDistributionJob: 封裝了INotificationDistributer的后臺任務(wù),當(dāng)Notification的接收者超過5人時會,ABP將分發(fā)任務(wù)封裝為一個后臺執(zhí)行任務(wù),以減少用戶等待時間。5是被hardcode到源碼中的。
?
?
返回ABP源碼分析系列文章目錄
總結(jié)
以上是生活随笔為你收集整理的【转】ABP源码分析二十四:Notification的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.13kg轻巧无比!微软Surfae
- 下一篇: 【转】CANOPEN总线的相关问题点整理