模組(類)之間解耦利器:EventPublishSubscribeUtils 事件釋出訂閱工具類
阿新 • • 發佈:2020-05-08
如果熟悉C#語言的小夥伴們一般都會知道委託、事件的好處,只需在某個類中提前定義好公開的委託或事件(委託的特殊表現形式)變數,然後在其它類中就可以很隨意的訂閱該委託或事件,當委託或事件被觸發執行時,會自動通知所有的訂閱者進行消費處理。(觀察者模式用委託來實現是最好不過了,DDD所提倡的事件驅動其根本理念也是如此),當然我這裡想到的是不需要在每個類中進行定義委託或事件,而是由一個統一的中介者(即EventPublishSubscribeUtils)來提供事件的訂閱及釋出操作,這樣各模組之間無需直接依賴,只需通過中介者完成釋出通知與訂閱回撥即可,何樂而不為呢?
這裡我先借助C#語言獨有的委託型別快速實現了一個簡易的EventPublishSubscribeUtils,程式碼如下:
```c#
///
/// 自定義事件釋出訂閱回撥工具類(業務解藕、關注點分離,避免互相依賴)--演示版
/// EventBus簡化版,觀察者模式
/// author:zuowenjun
///
public static class EventPublishSubscribeUtils
{
private static ConcurrentDictionary> EventHandlers { get; } = new ConcurrentDictionary>();
private static void removeRegisters(ref EventHandler