Как вы выставляете события в классе Facade? - PullRequest
2 голосов
/ 08 ноября 2011

Рассмотрим следующую структуру:

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 ]

1 голос
/ 08 ноября 2011

Я думаю, вам не следует раскрывать классы A, B и C, так как это нарушает основную точку Facade - скрытие этих классов за API и создание кода, использующего фасад, независимый от них.

По той же причине, я не думаю, что барботирование событий из A, B и C было бы хорошим выбором, хотя я бы подумал, если бы эти события находились на правильном уровне абстракции и не были слишком тесно связаны с классами A , B и C.

Если бы события были тесно связаны с классами, скрытыми за Фасадом, или слишком низкоуровневыми по сравнению с API-интерфейсом фасада, я думаю, что я бы свернул свои собственные события, возможно, оборачивая оригинальные.

0 голосов
/ 08 ноября 2011

Я думаю, это зависит от типа событий и от того, где они определены. Если они являются «глобальными» событиями, то любые слушатели не возражают, если они получают Facade или класс реализации, вероятно.

В таких языках, как C #, вы определяете свою сигнатуру события (delegate), и вы должны определять любые соответствующие параметры как интерфейсы, поэтому их реализация «неактуальна» для любых слушателей.

Если это невозможно, или слушатели сильно зависят от "реализации", я бы пошел оборачивать событие, а не пузырить его.

...