サブシステム通信設計パターンの実装
-
26-10-2019 - |
質問
以下に適した設計パターンを探しています。
次のシステム構造があります。
MainApplication
SubSystem1
SubSystem2
SubSystem3
MainApplicationが各サブシステムを初期化する場所、
SubSystem1 s1;
SubSystem2 s2;
SubSystem3 s3;
public MainApplication()
{
s1 = new SubSystem1();
s2 = new SubSystem2();
s3 = new SubSystem3();
}
そして、各サブシステムは互いに通信できるはずです。
各サブシステム内で、別のサブシステムからメソッドを呼び出すにはどうすればよいですか?たとえばで s1
public SubSystem1()
{
s2.Method1();
s3.Method2();
}
ファサードデザインパターンはここで機能しますか?もしそうなら、それはどのように実装されますか?そうでない場合、このシナリオにはどのデザインパターンを使用する必要がありますか?
解決
これは、サブシステム間の通信の種類にほぼ依存します。
それが抽象的である場合、つまりサブシステムは実際にお互いについて知る必要はありません、 パブリッシュサブスクライブベースのメッセージングメカニズム 適切かもしれません。見る https://en.wikipedia.org/wiki/publish/subscribe 紹介のために、しかし、私はこのコンセプトはかなり簡単であるべきだと思います。
一方、サブシステムが本当に具体的な方法でお互いを知る必要がある場合、なぜ彼らはそもそもサブシステムなのでしょうか?この種の分割を行うことは、実際に懸念の分離があることを示しているため、抽象的なインターフェイスを見つけることはそれほど難しくないはずです。そうであれば、サブシステムの責任を再考する必要があります。
他のヒント
デザインパターン名を覚えていませんでした。なぜ各サブシステムに他のサブシステムを知らせられないのですか?
s1.SetSubsystem2(s2);
s1.SetSubsystem3(s3);
...
あなたがもっと将来の変化に耐えたい場合は、各サブシステムのインターフェイスを次のように説明してください interface
, 、そして、SetSubsyStemxがコンクリートクラスではなく、そのインターフェイスを取得することを確認してください。
編集:インターフェイスの例。
最初のサブシステムが電子メールの送信方法を知っているとし、2番目のサブシステムがファイルを印刷する方法を知っているとしましょう。 2つのインターフェイスを宣言する必要があります。
interface IEmailSubsystem
{
void SendEmail(string content);
}
interface IPrintSubsystem
{
void PrintFile(string path);
}
次に、2つのサブシステムオブジェクトを定義できます。
class Subsystem1: IEmailSubsystem ...
class Subsystem2: IPrintSubsystem ...
3つのサブシステムを必要とする場合は、グローバルサブシステムレジストリが必要ですが、まだ心配しないでください。