Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如何公开由Facade类包装的事件?_Design Patterns - Fatal编程技术网

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

Design patterns 如何公开由Facade类包装的事件?,design-patterns,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,并让客户端代码订阅

考虑以下结构:

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

我认为您不应该公开类A、B和C,因为它打破了Facade的要点—将这些类隐藏在API后面,并使使用Facade的代码独立于它们

同样的原因,我不认为从A、B和C中触发事件是一个很好的选择,虽然我会考虑如果这些事件处于正确的戒断水平,并且与A、B和C.<
如果事件与隐藏在门面后面的类紧密耦合,或者与门面API相比级别太低,我想我会滚动自己的事件,可能会包装原始事件。

我认为这取决于事件的类型,以及它们是否被定义。如果它们是“全局”事件,那么任何侦听器都不会介意它们是获得Facade类还是实现类

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

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

包装的意思是“捕获”事件,“包装”它然后抛出包装的事件?是的。因为(只有)实现对任何侦听器都是隐藏的。