在工作中,我得到維護的產品有很多「移動部件」,我的主要障礙之一是它的架構如果十個不同的位置需要知道列表中的新項目被選中,直接代碼路徑必須進行編碼。例如在以下佈局中。是否有用於應用內通信的輕量級發佈/訂閱庫?
Form1
|
+-------------------+---------------------+
| | |
Control1 Control2 Control3
| | |
| +-----------+ +----+----+
| | | | |
SelectionList View1 View2 View3 View4
(我工作,對實際應用有比這更多層的GUI組件... ...的Bleh)
如果再加上另一種觀點認爲任何控制,這取決於其產品選中,Form1需要路由郵件。更糟的是,如果我們添加各種可以在選擇列表或任何視圖上調用的命令,則需要修改視圖以正確調用操作。通常,這樣的動作(通過主菜單選項和可用太...)安置在Form1中
(這樣想的文件列表中SelectionList的...)
這似乎是脆弱的,很麻煩。
最近我一直在玩一個應用程序中的子系統(如命令)和訂閱者只需要知道定義的應用程序中的子系統的想法(或獲取價格是否正確)事件參數和事件名稱以便接收事件。
我的問題是:
是否有商業的,開源的,或公共域庫在.net 3.5已經做到這一點? (我使用C#)。這需要是一個INTRA-APPLICATION機制。我已經知道的程序間庫和機制,例如MSMQ和This Codeplex project.
如果你有經驗的開發或使用這樣的解決方案,什麼是前3名的陷阱,以避免?
@喬希。謝謝,我會檢查出來。我已經知道我想如何運作。希望這會做到這一點,並節省一些時間。至於第二個問題,你有使用EventAggregator的經驗嗎?如果是這樣,儘管有可能,你會建議什麼樣的事情避免使用它? – 2009-12-06 03:23:03
那麼,EventAggregator本質上是非常基本的,所以我不能真正想到你不想做的事情,因爲它幾乎只做一件事(pub/sub事件管理)。我想我只是建議你不要試圖將它用於一切。例如,在適當的地方使用命令模式和標準事件。 – Josh 2009-12-06 05:20:13
感謝您的反饋。工作一直很忙,所以沒有機會嘗試它。我可能會在下週嘗試一下。 – 2009-12-09 06:25:15