网站消息通知设计
通知系統(tǒng)是一個(gè)成熟的 web 網(wǎng)站或者 app 最基本的功能,比如微博、知乎、掘金等。當(dāng)然今天本文要討論的不是這種大網(wǎng)站、大流量的通知系統(tǒng),而是一般用戶量的網(wǎng)站或者應(yīng)用。
通知系統(tǒng)的組成
一個(gè)通知系統(tǒng)主要由:通知來源、通知控制、通知方式、通知模板和通知的目標(biāo)五個(gè)部分組成。 后面詳細(xì)介紹各個(gè)組成的作用。組成結(jié)構(gòu)如下圖所示:
通知來源
通知來源是指觸發(fā)本次通知事件的源頭,一般包括以下三種情況:
通知控制
通知控制用來進(jìn)行權(quán)限控制、黑白名單過濾、用戶接收消息頻率控制、內(nèi)容審查等。總之控制和過濾相關(guān)的都放在這里。
通知模板
通知模板用來與數(shù)據(jù)模型結(jié)合并最終展示給用戶,類似 MVC 模式中的 V,可以是純文本也可以是 Velocity 之類的模板。引入通知模板主要是為了滿足以下三點(diǎn):
通知方式
常見的有站內(nèi)信、郵件、短信、工作通知(釘釘、企業(yè)微信)等。其中像郵件、短信和工作通知都是基于第三方應(yīng)用的,用的時(shí)候頂多在他們提供的接口上做一層封裝就可以了,所以沒什么可以講的。而站內(nèi)信往往則需要網(wǎng)站或者應(yīng)用自己設(shè)計(jì)和開發(fā),所以很多網(wǎng)上介紹通知系統(tǒng)都只是介紹站內(nèi)信的設(shè)計(jì)。
通知系統(tǒng)的分層
本文設(shè)計(jì)的通知系統(tǒng)流程圖如下,主要分為業(yè)務(wù)層、數(shù)據(jù)模型層、控制層、分發(fā)層、視圖層和發(fā)送層。分層可以降低各個(gè)模塊之間的耦合,每一層只做自己該做的事。
業(yè)務(wù)層
該層與業(yè)務(wù)相關(guān),屬于通知系統(tǒng)中的通知來源部分。是調(diào)用通知系統(tǒng)服務(wù)的調(diào)用方,放在這里為了后面講解業(yè)務(wù)與通知系統(tǒng)的解耦。
數(shù)據(jù)模型層
相信很多寫 web 后臺(tái)的程序員對(duì) MVC 模式很熟悉,這一層相當(dāng)于 MVC 模式中的 M 層,主要負(fù)責(zé)收集模型數(shù)據(jù)的。該層理論上劃分為通知系統(tǒng)的通知來源。該層的數(shù)據(jù)模型與上層業(yè)務(wù)緊密關(guān)聯(lián),不同的業(yè)務(wù)場(chǎng)景需要不同的通知數(shù)據(jù)。
控制/過濾層
即通知控制,用來進(jìn)行權(quán)限控制、黑白名單過濾、用戶接收消息頻率控制、內(nèi)容審查等。
分發(fā)層
不同的業(yè)務(wù)往往需要不同的方式發(fā)送通知消息,比如事件通知要進(jìn)行站內(nèi)信通知、而被封號(hào)往往會(huì)選擇郵件或者短信通知。消息到達(dá)分發(fā)層后,根據(jù)業(yè)務(wù)的不同選擇不同的發(fā)送策略。如果需要將發(fā)送的消息記錄進(jìn)行存儲(chǔ)也可以放在這層。
視圖層
本層與數(shù)據(jù)模型層關(guān)系很大,數(shù)據(jù)到這一層后會(huì)與模板結(jié)合組成要發(fā)送的內(nèi)容。
發(fā)送層
主要是調(diào)用短信、郵件、工作通知和站內(nèi)信等接口將消息發(fā)送出去。我們將在第三部分講解該層中的站內(nèi)信設(shè)計(jì)。
以上分層建議采用框架的方式將所有流程編排好,每層都采用接口或者抽象類的方式調(diào)用。每層都有一些基類和固定接口,一旦有新的業(yè)務(wù)來只需要繼承這些基類并實(shí)現(xiàn)相應(yīng)接口就可以了。
結(jié)尾
本文通知系統(tǒng)設(shè)計(jì)就講到這里,雖然簡(jiǎn)單但也是經(jīng)驗(yàn)之談吧。筆者在設(shè)計(jì)這塊的時(shí)候也是慢慢演化過來的。一開始業(yè)務(wù)少、功能簡(jiǎn)單,直接將所有代碼壘在一起。后期增加功能改動(dòng)非常之大,幾乎等于重構(gòu)。采用這種設(shè)計(jì)后,如果需要新增業(yè)務(wù),只需要新增一些類,流程就可以自動(dòng) run 起來。
轉(zhuǎn)載于:https://juejin.im/post/5d02629c5188253d592e0631
總結(jié)
- 上一篇: 【强化学习实战】基于gym和tensor
- 下一篇: 学习使用一款数据质控软件(Trimmom