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源码分析系列文章目录

【转】ABP源码分析二十四:Notification相关推荐

  1. 【转】ABP源码分析二十九:ABP.MongoDb

    这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类,封装了对MongoDb数据库的操作. 这个module通过引用MongoDB.Driver, ...

  2. 【转】ABP源码分析二十六:核心框架中的一些其他功能

    本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...

  3. ABP源码分析三十四:ABP.Web.Mvc

    ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...

  4. 【转】ABP源码分析三十四:ABP.Web.Mvc

    ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...

  5. 【转】ABP源码分析二十八:ABP.MemoryDB

    这个模块简单,且无实际作用(该模块用于支持ABP框架单元测试的).一般实际项目中都有用数据库做持久化,用了数据库就无法用这个MemoryDB 模块了.原因在于ABP限制了UnitOfWork的类型只能 ...

  6. 【转】ABP源码分析二十五:EventBus

    IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...

  7. 【转】ABP源码分析二十二:Navigation

    MenuDefinition:封装了导航栏上的主菜单的属性. MenuItemDefinition:封装了主菜单的子菜单的属性.子菜单可以引用其他子菜单构成一个菜单树 UserMenu/UserMen ...

  8. 【转】ABP源码分析二十:ApplicationService

    IApplicationService : 空接口,起标识作用.所有实现了IApplicationService 的类都会被自动注入到容器中.同时所有IApplicationService对象都会被注 ...

  9. ABP源码分析二十五:EventBus

    IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...

最新文章

  1. 轻松两步,我在 SpringBoot 服务上实现了接口限流
  2. html编写的过程中,为什么font设置属性的时候,第二个属性不起作用
  3. IRP_MJ_CREATE
  4. 区块链BaaS云服务(28)TOP Network 之数据结构
  5. 关键路径问题--完美版
  6. Linux文本查看命令之uniq
  7. sql LEFT JOIN RIGHT JOIN(左连接)(mysql)
  8. 【数据结构与算法】实验 模拟FIFO网络打印机
  9. 千月影视双端源码开源版_最新支持双端神器更新,属实有点牛逼!
  10. DbNetSpell
  11. 反卷积可视化工具--deconv-deep-vis-toolbox
  12. [Swift]LeetCode831. 隐藏个人信息 | Masking Personal Information
  13. 特殊矩阵——三对角矩阵(Tridiagonal Matrix)
  14. 符号熵(附matlab代码)
  15. 虚拟化技术 — GuestOS Agent
  16. sscanf提取字符串数字
  17. Python 预测 NBA 比赛结果
  18. 计算机控制台程序,什么是电脑控制台,是DOS设定吗?
  19. P7560-[JOISC 2021 Day1]フードコート【吉司机线段树】
  20. 我所了解的JavaScript糟粕和鸡肋

热门文章

  1. 【MySQL原理解析】01. 一条SQL查询语句是如何执行的
  2. spring体系思维导图
  3. axios的数据请求方式及跨域
  4. (转)分布式锁的几种使用方式(redis、zookeeper、数据库)
  5. java if,if...else...的应用
  6. 【FICO 汇率】汇率
  7. jenkins Auth fail验证失败
  8. Fragment销毁时replace和add两个方法的区别
  9. Gitlab的develop角色的人没有权限无法提交的问题解决方案
  10. why I need a flow learn note.