博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ABP源码分析二十四:Notification
阅读量:5779 次
发布时间:2019-06-18

本文共 2728 字,大约阅读时间需要 9 分钟。

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到源码中的。

 

 

返回

转载地址:http://lokyx.baihongyu.com/

你可能感兴趣的文章
Node.js 2017企业用户调查结果发布
查看>>
“软”苹果水逆的一周:杂志服务崩溃,新机型遭泄露,芯片首架离职
查看>>
JAVA的优势就是劣势啊!
查看>>
ELK实战之logstash部署及基本语法
查看>>
帧中继环境下ospf的使用(点到点模式)
查看>>
BeanShell变量和方法的作用域
查看>>
LINUX下防恶意扫描软件PortSentry
查看>>
由数据库对sql的执行说JDBC的Statement和PreparedStatement
查看>>
springmvc+swagger2
查看>>
软件评测-信息安全-应用安全-资源控制-用户登录限制(上)
查看>>
我的友情链接
查看>>
Java Web Application 自架构 一 注解化配置
查看>>
如何 debug Proxy.pac文件
查看>>
Python 学习笔记 - 面向对象(特殊成员)
查看>>
Kubernetes 1.11 手动安装并启用ipvs
查看>>
Puppet 配置管理工具安装
查看>>
Bug多,也别乱来,别被Bug主导了开发
查看>>
sed 替换基础使用
查看>>
高性能的MySQL(5)创建高性能的索引一B-Tree索引
查看>>
oracle备份与恢复--rman
查看>>