閒談軟體設計: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 的地方改成注入新的實作即可,核心邏輯層式不需要更改的。

raw-image

NCC 與 EventCenter

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

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

raw-image

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

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

raw-image

小節

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

留言
avatar-img
Spirit的沙龍
58會員
116內容數
這是從 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
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
別讓你的房子,變成家中最大的「閒置資產」 作為一名服務高淨值客戶的私人銀行顧問,我每天的任務只有一個:幫客戶「讓錢滾動」。然而,當我觀察身旁許多同樣育有子女的朋友們,即便他們多半已是職場上的中高階主管,表面上看似光鮮亮麗,有房有車;但實際上,大家都是典型的「夾心世代」。每個月薪水一入帳,扣掉沉重的
Thumbnail
別讓你的房子,變成家中最大的「閒置資產」 作為一名服務高淨值客戶的私人銀行顧問,我每天的任務只有一個:幫客戶「讓錢滾動」。然而,當我觀察身旁許多同樣育有子女的朋友們,即便他們多半已是職場上的中高階主管,表面上看似光鮮亮麗,有房有車;但實際上,大家都是典型的「夾心世代」。每個月薪水一入帳,扣掉沉重的
Thumbnail
Canva 是一款廣受歡迎的線上設計軟體,讓使用者可以輕鬆地製作各種網頁內容, 以其友善的使用者界面和豐富的設計模板而聞名,即使沒有設計基礎的人也能快速上手,製作出專業水準的作品,Canva提供免費版本,也提供付費的Canva Pro 和Canva for Teams 版本,Canva for En
Thumbnail
Canva 是一款廣受歡迎的線上設計軟體,讓使用者可以輕鬆地製作各種網頁內容, 以其友善的使用者界面和豐富的設計模板而聞名,即使沒有設計基礎的人也能快速上手,製作出專業水準的作品,Canva提供免費版本,也提供付費的Canva Pro 和Canva for Teams 版本,Canva for En
Thumbnail
從繪圖、建模、渲染到 BIM,這篇懶人包整理最熱門建築土木軟體工具,並針對各軟體用途、趨勢與公司特色進行介紹,帶你快速掌握用途與趨勢!
Thumbnail
從繪圖、建模、渲染到 BIM,這篇懶人包整理最熱門建築土木軟體工具,並針對各軟體用途、趨勢與公司特色進行介紹,帶你快速掌握用途與趨勢!
Thumbnail
如果你喜歡畫畫、設計,或者想知道怎麼做一個超好用的手機App或網站,那你一定要認識 Figma!它是一個很簡單就能上手的線上設計工具,不用下載軟體,只要開瀏覽器就能用,還可以和朋友一起合作。 這篇文章專為零基礎的你準備,帶你認識 Figma,一個超簡單又好用的線上設計工具!
Thumbnail
如果你喜歡畫畫、設計,或者想知道怎麼做一個超好用的手機App或網站,那你一定要認識 Figma!它是一個很簡單就能上手的線上設計工具,不用下載軟體,只要開瀏覽器就能用,還可以和朋友一起合作。 這篇文章專為零基礎的你準備,帶你認識 Figma,一個超簡單又好用的線上設計工具!
Thumbnail
最近發現了一個有趣的東西,還記得我們小時候玩蓋房子遊戲嗎?現在,有款線上軟體讓我們可以在生活中實現建造,和裝潢夢想家園的樂趣 — — 就是Homestyler! 雖然我很早就知道這個軟體,最近想找個工具幫忙規劃房間佈置,沒想到介面更新繁體中文,內容也變得更豐富有趣了,所以迫不及待想跟各位居家設
Thumbnail
最近發現了一個有趣的東西,還記得我們小時候玩蓋房子遊戲嗎?現在,有款線上軟體讓我們可以在生活中實現建造,和裝潢夢想家園的樂趣 — — 就是Homestyler! 雖然我很早就知道這個軟體,最近想找個工具幫忙規劃房間佈置,沒想到介面更新繁體中文,內容也變得更豐富有趣了,所以迫不及待想跟各位居家設
Thumbnail
Q:什麼是Frontpage網頁設計軟體? Microsoft FrontPage曾是微軟公司推出的一款網頁設計與管理工具,目前已不再生產。它一度作為入門級網頁設計者的首選,而微軟隨後推出了Expression Web和Microsoft SharePoint Designer來取代...
Thumbnail
Q:什麼是Frontpage網頁設計軟體? Microsoft FrontPage曾是微軟公司推出的一款網頁設計與管理工具,目前已不再生產。它一度作為入門級網頁設計者的首選,而微軟隨後推出了Expression Web和Microsoft SharePoint Designer來取代...
Thumbnail
Canva 教學 - 免費線上平面設計軟體推薦 更新於 2020/ 12   " A picture is worth a thousand words " 有時候,我們跟女朋友說「我愛你」,不如給她一張 DIY 的卡片。 如果您是個部落客,文章中常常需要一些圖片來幫助我們,讓讀者朋友更容易了解內容
Thumbnail
Canva 教學 - 免費線上平面設計軟體推薦 更新於 2020/ 12   " A picture is worth a thousand words " 有時候,我們跟女朋友說「我愛你」,不如給她一張 DIY 的卡片。 如果您是個部落客,文章中常常需要一些圖片來幫助我們,讓讀者朋友更容易了解內容
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News