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

  2. ABP源码分析二十:ApplicationService

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

  3. ABP源码分析二十二:Navigation

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

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

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

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

    这个模块简单,且无实际作用.一般实际项目中都有用数据库做持久化,用了数据库就无法用这个MemoryDB 模块了.原因在于ABP限制了UnitOfWork的类型只能有一个(前文以作介绍),一般用了数据库 ...

  6. ABP源码分析二十九:ABP.MongoDb

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

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

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

  8. Vue.js 源码分析(二十四) 高级应用 自定义指令详解

    除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令. 官网介绍的比较抽象,显得很高大上,我个人对自定义指令的理解是:当自定义指令作用在一些DOM元素或组件上 ...

  9. ABP源码分析三十二:ABP.SignalR

    Realtime Realtime是ABP底层模块提供的功能,用于管理在线用户.它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在 ...

随机推荐

  1. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  2. TypeScript: Angular 2 的秘密武器(译)

    本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...

  3. Base64编码

    Base64编码 写在前面 今天在做一个Android app时遇到了一个问题:Android端采用ASE对称加密的数据在JavaWeb(jre1.8.0_7)后台解密时,居然解密失败了!经过测试后发 ...

  4. App你真的需要么

    随着智能手机.移动路联网的普及,APP火的一塌糊涂,APP应用可谓五花八门,街上经常看到各种推广:扫码安装送东西,送优惠券.仿佛一夜之间一个企业没有自己的APP就跟不上时代了. 有时我在想:APP,你 ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-补充WebApi与Unity注入-配置文件

    系列目录 上一篇演示了WebApi利用Unity注入 很多人问我如何用配置文件来配置注入,本节演示如何利用配置文件来注入,道理是一样的,跳转到上一节下载源码一起来动手! 1.打开源码定位到文件Depe ...

  6. obj.style.z-index的正确写法

    obj.style.z-index的正确写法 今天发现obj.style.z-index在js里面报错,后来才知道在js里应该把含"-"的字符写成驼峰式,例如obj.style.z ...

  7. Node.js入门(一)

    一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...

  8. 【干货分享】流程DEMO-费用报销

    流程名: 费用报销 业务描述: 流程发起时,要选择需要关联的事务审批单,会检查是否超申请,如果不超申请,可以直接发起流程,如果超了申请,需要检查预算,如果预算不够,将不允许发起报销申请,如果预算够用, ...

  9. 高仿it之家新闻客户端源码

    仿it之家新闻客户端界面,数据为本地假数据.仅实现了新闻模块的功能. 源码下载:http://code.662p.com/list/11_1.html 详细说明:http://android.662p ...

  10. mysql百万级分页优化

    普通分页 数据分页在网页中十分多见,分页一般都是limit start,offset,然后根据页码page计算start , 这种分页在几十万的时候分页效率就会比较低了,MySQL需要从头开始一直往后 ...