2011-11-08 23 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

是的。因为(只)然后实现是隐藏给任何听众。 –