2011-11-08 6 views
2

は、次のような構造を考えてみましょう:どのようにファサードクラスで包まれたイベントを公開しますか?

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を公開し、クライアントコードでイベントを購読できるようにしますか? APIの後ろにこれらのクラスを隠し、それらのファサードの独立を使用してコードを作る -

答えて

1

は、私はそれがファサードの主なポイントを壊すようあなたは、クラスA、BおよびCを公開するべきではないと思います。

同じ理由で、A、B、Cのイベントをバブリングするのは良い選択ではないと思いますが、それらのイベントが適切なレベルの棄権であり、クラスとあまりにも緊密に結びついていないと考えると思います

イベントがファサードの背後に隠れているクラスやファサードAPIに比べて低すぎるクラスと密接に関連していた場合、自分のイベントをロールバックして元のイベントをラップする可能性があります。

0

私はそれは、イベントの種類に依存し、それらが定義されていたと思います。彼らは「グローバル」のイベントであれば、彼らはおそらく、ファサードや実装クラスを取得している場合は、任意のリスナーは気にしません。

C#のような言語では、イベントシグネチャ(delegate)を定義し、関連するパラメータをインターフェイスとして定義する必要があります。したがって、その実装はすべてのリスナーには無関係です。

、これは不可能である、またはリスナーが「実装」に大きく依存している場合、私はイベントをラップするのではなく、それらを泡立てるために行くと思います。ラッピングすることにより

+0

、イベント、包まれたイベントをスローし、それを「包む」「引く」意味ですか? – Ian

+0

はい。そのため、実装はすべてのリスナーに隠されています。 –

関連する問題