閒談軟體設計:Event Cener

更新 發佈閱讀 5 分鐘
圖片來源:ChatGPT 生成

圖片來源:ChatGPT 生成

在先前 閒談軟體設計:NCC 聊到,如何使用 ChannelProcessor 處理不同的通信意圖,並將意圖與實際的通訊手段分離,但有個核心的元素上回只是簡單地用 Message Queue 帶過,今天就來聊聊這個 Message Queue 的抽象層吧!

EventCenter 抽象層

跟載入 SMS SDK 只是為了滿足發送簡訊的意圖一樣,不管是使用 RabbitMQ 或是 GCP PubSub,其實也是完成發送一則事件或是訂閱一則事件的目的,實際上應用程式根本不在意是用 RabbitMQ 或是 GCP PubSub,這也是我個人不太喜歡在核心邏輯層與特定技術框架有關聯的主因。

要做到保護,最簡單的做法就是多一層抽象層:EventCenter,一個只有三個函式的介面,一個描述如何發送事件到某個主題 (topic),另一個描述如何建立一個訂閱並接收事件,最後,就是怎麼解除訂閱,這個抽象層很薄,基本上沒花什麼時間,是個值得的投入。

具體實作

但只有抽象層是無法動的,要有具體的實作才能真正動起來,因此建立一個 GCPEventCenter 實作 EventCenter 這個介面。

在 publish 函式裡,setupPublisher 負責確保 GCP PubSub 的 topic 存在然後建立 publisher,最後將 event 轉成 GCP SDK 定義的 PubsubMessage 物件(asMessage) 發送出去。subscribe 則是反向的流程,setupScriber 會確保 subscription 存在,然後用 decoder 將 PubsubMessage 解碼回原本的型態,再派送給註冊的 listener。

GCP 的 SDK 提供的 API 其實蠻低階的,必須完成蠻多初始化的動作才能開始使用,這些過程,不論有沒有 EventCenter 這個抽象層,都是需要的,只是現在通通都集中在 GCPEventCenter 這個物件中,並統一用 EventCenter 這個介面操作。

如果哪天不想使用 GCP PubSub 了,想要自己架設 RabbitMQ 或是 Kafka 叢集,就新增一個 RabbitMQEventCenter 或是 KakfaEventCenter 然後實作相同的 EventCenter 介面。然後在原本注入 GCPEventCenter 的地方改成注入新的實作即可,核心邏輯層式不需要更改的。

vocus|新世代的創作平台

NCC 與 EventCenter

回到 NCC,NCC 的 notify 實作其實很單純,只是將 intent 當作 event 送到對應的 topic,對於背後是 GCP PubSub 還是 RabbitMQ,是完全不知情的。

在接收端也是類似,若以布署的角度看 (下圖),在 Process A (傳送端),將 intent 送出,Process B (背景處裡端) 處理收到的 intent。

vocus|新世代的創作平台

以架構或模組的概念看,NotificationCenter 和 DefaultNotificationCenter 則是放在核心模組 (ncc-core 模組),EventCenter 是核心模組能使用的介面,但在核心模組則看不到實作的類別 (PubSubEventCenter 在 gcp 模組)。

真正的實作實體,是應用程式啟動時,負責初始化後再將實體注入 (inject) 給 DefaultNotificationCenter,若要換另一個實作,只需在初始化時選擇另一個實作即可。

vocus|新世代的創作平台

小節

到這邊,內容已經都講差不多了,EventCenter 作為一個抽象層,將意圖與實作分離,讓抽換時作能更將方便。不過,也許有人會問,EventCenter 對 NCC 來說,真的適合放在核心嗎?對於 NCC 來說,會不會也只是一個實作的細節?這其實是可以討論的,等之後有空再聊吧!

留言
avatar-img
Spirit 異想世界
58會員
122內容數
這是從 Medium 開始的一個專題,主要是想用輕鬆閒談的方式,分享這幾年軟體開發的心得,原本比較侷限於軟體架構,但這幾年的文章不僅限於架構,也聊不少流程相關的心得,所以趁換平台,順勢換成閒談軟體設計。
Spirit 異想世界的其他內容
2026/01/11
這篇文章探討了「軟刪除」的實現方式、優缺點,並解釋軟刪除如何解決開發與營運系統中常見的資料刪除難題,分享在實作時,讀取邏輯的修改、關聯資料的處理,以及「同生共死」原則在設計決策中的重要性。此外,軟刪除為「超級使用者」提供的「開天眼」能力。以增加系統複雜度換取資料處理的彈性。
Thumbnail
2026/01/11
這篇文章探討了「軟刪除」的實現方式、優缺點,並解釋軟刪除如何解決開發與營運系統中常見的資料刪除難題,分享在實作時,讀取邏輯的修改、關聯資料的處理,以及「同生共死」原則在設計決策中的重要性。此外,軟刪除為「超級使用者」提供的「開天眼」能力。以增加系統複雜度換取資料處理的彈性。
Thumbnail
2026/01/04
在決定離開 Spring Boot 後,處理資料庫交易管理成了一個挑戰。本文探討如何在不依賴 Spring framework 的情況下,結合 HikariCP、Sql2o、Service Locator 和 ThreadLocal 來實現交易管理,並提供一個基於函式風格的聲明式範例。
Thumbnail
2026/01/04
在決定離開 Spring Boot 後,處理資料庫交易管理成了一個挑戰。本文探討如何在不依賴 Spring framework 的情況下,結合 HikariCP、Sql2o、Service Locator 和 ThreadLocal 來實現交易管理,並提供一個基於函式風格的聲明式範例。
Thumbnail
2025/12/28
透過實際應用場景,闡述如何設計 Read Model 以優化效能,並討論其與領域模型的關係,同時提出設計時需注意的細節,最後留下關於 Read Model 在架構中的位置的討論。
Thumbnail
2025/12/28
透過實際應用場景,闡述如何設計 Read Model 以優化效能,並討論其與領域模型的關係,同時提出設計時需注意的細節,最後留下關於 Read Model 在架構中的位置的討論。
Thumbnail
看更多
你可能也想看
Thumbnail
從繪圖、建模、渲染到 BIM,這篇懶人包整理最熱門建築土木軟體工具,並針對各軟體用途、趨勢與公司特色進行介紹,帶你快速掌握用途與趨勢!
Thumbnail
從繪圖、建模、渲染到 BIM,這篇懶人包整理最熱門建築土木軟體工具,並針對各軟體用途、趨勢與公司特色進行介紹,帶你快速掌握用途與趨勢!
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
最近發現了一個有趣的東西,還記得我們小時候玩蓋房子遊戲嗎?現在,有款線上軟體讓我們可以在生活中實現建造,和裝潢夢想家園的樂趣 — — 就是Homestyler! 雖然我很早就知道這個軟體,最近想找個工具幫忙規劃房間佈置,沒想到介面更新繁體中文,內容也變得更豐富有趣了,所以迫不及待想跟各位居家設
Thumbnail
最近發現了一個有趣的東西,還記得我們小時候玩蓋房子遊戲嗎?現在,有款線上軟體讓我們可以在生活中實現建造,和裝潢夢想家園的樂趣 — — 就是Homestyler! 雖然我很早就知道這個軟體,最近想找個工具幫忙規劃房間佈置,沒想到介面更新繁體中文,內容也變得更豐富有趣了,所以迫不及待想跟各位居家設
Thumbnail
Canva 是一款廣受歡迎的線上設計軟體,讓使用者可以輕鬆地製作各種網頁內容, 以其友善的使用者界面和豐富的設計模板而聞名,即使沒有設計基礎的人也能快速上手,製作出專業水準的作品,Canva提供免費版本,也提供付費的Canva Pro 和Canva for Teams 版本,Canva for En
Thumbnail
Canva 是一款廣受歡迎的線上設計軟體,讓使用者可以輕鬆地製作各種網頁內容, 以其友善的使用者界面和豐富的設計模板而聞名,即使沒有設計基礎的人也能快速上手,製作出專業水準的作品,Canva提供免費版本,也提供付費的Canva Pro 和Canva for Teams 版本,Canva for En
Thumbnail
如果你喜歡畫畫、設計,或者想知道怎麼做一個超好用的手機App或網站,那你一定要認識 Figma!它是一個很簡單就能上手的線上設計工具,不用下載軟體,只要開瀏覽器就能用,還可以和朋友一起合作。 這篇文章專為零基礎的你準備,帶你認識 Figma,一個超簡單又好用的線上設計工具!
Thumbnail
如果你喜歡畫畫、設計,或者想知道怎麼做一個超好用的手機App或網站,那你一定要認識 Figma!它是一個很簡單就能上手的線上設計工具,不用下載軟體,只要開瀏覽器就能用,還可以和朋友一起合作。 這篇文章專為零基礎的你準備,帶你認識 Figma,一個超簡單又好用的線上設計工具!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News