一、?訂閱雜志
我們很多人都訂過(guò)雜志,其過(guò)程很簡(jiǎn)單。只要告訴郵局我們所要訂的雜志名、投遞的地址,付了錢就OK。出版社定期會(huì)將出版的雜志交給郵局,郵局會(huì)根據(jù)訂閱的列表,將雜志送達(dá)消費(fèi)者手中。這樣我們就可以看到每一期精彩的雜志了。

仔細(xì)思考一下訂雜志的過(guò)程,我們會(huì)發(fā)現(xiàn)這樣幾個(gè)特點(diǎn):
1、?消費(fèi)者訂雜志不需要直接找出版社;
2、?出版社只需要把雜志交給郵局;
3、?郵局將雜志送達(dá)消費(fèi)者。
郵局在整個(gè)過(guò)程中扮演了非常重要的中轉(zhuǎn)作用,在出版社和消費(fèi)者相互不需要知道對(duì)方的情況下,郵局完成了雜志的
二、?發(fā)布-訂閱消息模式
剛剛講了訂閱雜志,下面我們會(huì)講傳統(tǒng)調(diào)用模式演化到發(fā)布-訂閱消息模式。
有些網(wǎng)站在注冊(cè)用戶成功后發(fā)一封激活郵件,用戶收到郵件后點(diǎn)擊激活鏈接后才能使用該網(wǎng)站。一般的做法是在注冊(cè)用戶業(yè)務(wù)邏輯中調(diào)用發(fā)送郵件的邏輯。這樣用戶業(yè)務(wù)就依賴于郵件業(yè)務(wù)。如果以后改為短信激活,注冊(cè)用戶業(yè)務(wù)邏輯就必須修改為調(diào)用發(fā)送短信的邏輯。如果要注冊(cè)后給用戶加點(diǎn)積分,再加一段邏輯。經(jīng)過(guò)多次修改,我們發(fā)現(xiàn)很簡(jiǎn)單的注冊(cè)用戶業(yè)務(wù)已經(jīng)越來(lái)越復(fù)雜,越來(lái)越難以維護(hù)。相信很多開發(fā)者都會(huì)有類似痛苦的經(jīng)歷。

即使用戶業(yè)務(wù)實(shí)現(xiàn)中對(duì)其他業(yè)務(wù)是接口依賴,也避免不了業(yè)務(wù)變化帶來(lái)的依賴影響。怎么辦?解耦!將注冊(cè)用戶業(yè)務(wù)邏輯中注冊(cè)成功后的處理剝離出來(lái)。
再回頭看看“訂閱雜志”,如果沒有郵局,出版社就必須自己將雜志送達(dá)所有消費(fèi)者。這種情形就和現(xiàn)在的注冊(cè)用戶業(yè)務(wù)一樣。我們發(fā)現(xiàn)問(wèn)題了,在用戶業(yè)務(wù)和其他業(yè)務(wù)之間缺少了郵局所扮角色。
我們把郵局抽象成一個(gè)管理消息的地方,叫“消息管理器”。注冊(cè)用戶成功后發(fā)送一個(gè)消息給消息管理器,由消息管理器轉(zhuǎn)發(fā)該消息給需要處理的業(yè)務(wù)?,F(xiàn)在,用戶業(yè)務(wù)只依賴于消息管理器了,它再也不會(huì)為了注冊(cè)用戶成功后的其他處理而煩惱。

注冊(cè)用戶的改造就是借鑒了“訂閱雜志”這樣原始的模式。我們?cè)龠M(jìn)一步抽象,用戶業(yè)務(wù)就是消息的“生產(chǎn)者”,它將消息發(fā)布到消息管理器。郵件業(yè)務(wù)就是消息的“消費(fèi)者”,它將收到的消息進(jìn)行處理。郵局可以訂閱很多種雜志,雜志都是通過(guò)某種編號(hào)來(lái)區(qū)分;消息管理器也可以管理多種消息,每種消息都會(huì)有一個(gè)“主題”來(lái)區(qū)分,消費(fèi)者都是通過(guò)主題來(lái)訂閱的。

發(fā)布-訂閱消息模式已經(jīng)呈現(xiàn)在我們面前,利用它可以產(chǎn)生更靈活、更松散耦合的系統(tǒng)。
參考鏈接:
1、發(fā)布-訂閱模式解釋:https://blog.csdn.net/coderyjz/article/details/79422267