zoukankan      html  css  js  c++  java
  • 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源码分析系列文章目录

  • 相关阅读:
    [文档].Actel – Actel HDL Coding Style Guide
    [原创].七段数码管驱动,Verilog版本
    [转载].“君让臣死 臣不得不死 不死也得死”的NIOS II 9.1 SP1中断问题
    [原创].菜农M0助学板PWM呼吸灯小练(寄存器操作方式)
    [笔记].菜农M0助学板之读SD卡块内容小练(库操作方式)
    [笔记].STM32 BOOT[0:1]启动设置
    [转载][奇文共赏].由入门到精通 吃透PID2.0.PDF
    [笔记].串型DAC TLC5620生成锯齿波、三角波实验,Verilog版本
    [笔记].怎样使用C语言读取文件中的数据,然后再写到文件中
    [原创].关于SD卡的隐藏分区的认识过程及结果
  • 原文地址:https://www.cnblogs.com/1zhk/p/5365757.html
Copyright © 2011-2022 走看看