如何公开Facade类包装的事件?

时间:2011-11-08 09:22:18

标签: design-patterns

考虑以下结构:

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,并让客户端代码订阅该事件?

2 个答案:

答案 0 :(得分:1)

我认为你不应该公开类A,B和C,因为它打破了Facade的主要观点 - 将这些类隐藏在API之后,并使用独立于它的Facade来创建代码。

出于同样的原因,我不认为从A,B和C中冒泡是一个不错的选择,尽管如果那些事件处于正确的抽象级别并且没有与A类紧密耦合,我会考虑它,B和C.

如果事件与Facade背后隐藏的类紧密耦合,或者与Facade API相比太低级别,我想我会推出自己的事件,可能包装原始事件。

答案 1 :(得分:0)

我认为这取决于事件的类型,是否已定义。如果它们是“全局”事件,那么任何听众都不会介意他们是否正在获得Facade或实现类。

在C#等语言中,您定义了事件签名(delegate),您应该将任何相关参数定义为接口,因此它们的实现与任何侦听器都“无关”。

如果这是不可能的,或者听众严重依赖“实施”,我会去包装事件而不是冒泡它们。