2011-11-08 21 views
2

考慮以下結構:如何暴露由Facade類包裝的事件?

Class A: Method A - Fires Event A 
Class B: Method B - Fires Event B 
Class C: Method C - Fires Event C 

Facade: Method ABC (calls method A, B and C), Fires Event A, B and C. 

你如何暴露事件A,B和C?你是否從A,B和C冒出了事件?你創建了另一個事件嗎?你是否公開類A,B和C並讓客戶端代碼訂閱該事件?

回答

1

我認爲你不應該暴露類A,B和C,因爲它破壞了Facade的主要觀點 - 隱藏了API背後的類,並且使用獨立於它們的外觀製作代碼。

出於同樣的原因,我不認爲冒泡來自A,B和C的事件將是一個不錯的選擇,儘管我會考慮如果這些事件處於正確的抽象級別並且不與類緊密結合A,B和C.

如果事件與Facade背後隱藏的類緊密結合,或者與Facade API相比太低,我想我會推出自己的事件,可能會包裝原始事件。

0

我認爲這取決於事件的類型,並且它們是被定義的。如果他們是「全局」事件,那麼任何聽衆都不介意他們是否獲得了Facade或實現類。在C#等語言中,您可以定義事件簽名(delegate),並且應該將任何相關參數定義爲接口,因此它們的實現對任何偵聽器都是「不相關的」。

如果這是不可能的,或者聽衆很大程度上依賴於「實現」,我會去包裝事件而不是冒泡他們。

+0

通過包裝,你的意思是「捕捉」事件,「包裝」它然後拋出包裝的事件? – Ian

+0

是的。因爲(只)然後實現是隱藏給任何聽衆。 –