通知系统是一个成熟的 web 网站或者 app 最基本的功能,好比微博、知乎、掘金等。固然今天本文要讨论的不是这种大网站、大流量的通知系统,而是通常用户量的网站或者应用。程序员
一个通知系统主要由:通知来源、通知控制、通知方式、通知模板和通知的目标五个部分组成。 后面详细介绍各个组成的做用。组成结构以下图所示:web
通知来源是指触发本次通知事件的源头,通常包括如下三种状况:微信
通知控制用来进行权限控制、黑白名单过滤、用户接收消息频率控制、内容审查等。总之控制和过滤相关的都放在这里。app
通知模板用来与数据模型结合并最终展现给用户,相似 MVC 模式中的 V,能够是纯文本也能够是 Velocity 之类的模板。引入通知模板主要是为了知足如下三点:框架
常见的有站内信、邮件、短信、工做通知(钉钉、企业微信)等。其中像邮件、短信和工做通知都是基于第三方应用的,用的时候顶多在他们提供的接口上作一层封装就能够了,因此没什么能够讲的。而站内信每每则须要网站或者应用本身设计和开发,因此不少网上介绍通知系统都只是介绍站内信的设计。网站
本文设计的通知系统流程图以下,主要分为业务层、数据模型层、控制层、分发层、视图层和发送层。分层能够下降各个模块之间的耦合,每一层只作本身该作的事。设计
该层与业务相关,属于通知系统中的通知来源部分。是调用通知系统服务的调用方,放在这里为了后面讲解业务与通知系统的解耦。cdn
相信不少写 web 后台的程序员对 MVC 模式很熟悉,这一层至关于 MVC 模式中的 M 层,主要负责收集模型数据的。该层理论上划分为通知系统的通知来源。该层的数据模型与上层业务紧密关联,不一样的业务场景须要不一样的通知数据。对象
即通知控制,用来进行权限控制、黑白名单过滤、用户接收消息频率控制、内容审查等。blog
不一样的业务每每须要不一样的方式发送通知消息,好比事件通知要进行站内信通知、而被封号每每会选择邮件或者短信通知。消息到达分发层后,根据业务的不一样选择不一样的发送策略。若是须要将发送的消息记录进行存储也能够放在这层。
本层与数据模型层关系很大,数据到这一层后会与模板结合组成要发送的内容。
主要是调用短信、邮件、工做通知和站内信等接口将消息发送出去。咱们将在第三部分讲解该层中的站内信设计。
以上分层建议采用框架的方式将全部流程编排好,每层都采用接口或者抽象类的方式调用。每层都有一些基类和固定接口,一旦有新的业务来只须要继承这些基类并实现相应接口就能够了。
本文通知系统设计就讲到这里,虽然简单但也是经验之谈吧。笔者在设计这块的时候也是慢慢演化过来的。一开始业务少、功能简单,直接将全部代码垒在一块儿。后期增长功能改动很是之大,几乎等于重构。采用这种设计后,若是须要新增业务,只须要新增一些类,流程就能够自动 run 起来。