我試圖最近實現我自己的簡單事件聚合器。我從MSDN上的事件聚合器文章中獲得了很多靈感。有一件事我注意到關於MSDN上的事件聚合器事件實際上是自己的類。這根本不是一件壞事。不過,我總覺得總是爲每一個小事件創建一個新的空課程很尷尬。在事件聚合器中混合具有事件類的枚舉
我覺得很尷尬的原因是因爲需要爲每一個粒度事件創建一個類。例如,鼠標點擊事件會有double_click,single_click,left_click,right_click等,並且所有這些將會有一個類。一段時間後它會變得混亂。
所以在我自己的實現中,我認爲我可以用ClickEvent
是一個類的方式來創建它,但是與Click事件相關的所有粒度事件將是ClickEvent
的「類型」。在這種情況下,「類型」是enum
。用法會是這個樣子:
//Publisher
eventAggregator.GetEvent<ClickEvent>.Publish(ClickEventType.Double_Click, eventArgs);
//Subscriber
eventAggregator.GetEvent<ClickEvent>.Subscribe(ClickEventType.Double_Click, handlerMethod);
不過,我不知道這是否實施有違於使用強類型事件的整個目的是什麼?現在,ClickEvent
似乎只是不同事件枚舉類型的容器。
這個工作假設你想要在處理程序中的一些代碼來確定什麼類型的點擊被引發。如果您準備繼續在每個處理程序中編寫代碼 - 這是兩個惡意中較小的一個對您而言,我認爲這很有效。我想 – Charleh
總是這樣。我的意思不是建議鼠標事件背後的任何具體模型,而是要表明像「讓我們爲所有事物建立新班級」這樣的想法無處可逃。請注意他的單點擊,雙擊,左鍵單擊和右鍵單擊課程的想法。他應該如何模擬左側雙擊和右側雙擊? –
只需爲每個特定活動創建一個班級 - 例如SingleLeft,DoubleLeft。我並不是說你的實現是錯誤的,這似乎是自然而然的事情,但顯然,你最終會在每個單擊處理程序中添加一些額外的代碼來確定它是哪種類型的點擊,而創建一個類型爲每個事件消息都可讓您自由地知道事件類型是否入站,而無需在處理程序中執行額外的處理。無論哪個人讓你的生活更輕鬆,我只是喜歡每個消息類型的實現。 – Charleh