1

次の適切な設計パターンを探しています。

次のシステム構造があります。

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();
    }

ファサードデザインパターンはここで機能しますか? もしそうなら、それはどのように実装されますか?そうでない場合、このシナリオではどの設計パターンを使用する必要がありますか?

4

2 に答える 2

2

これは、サブシステム間の通信の種類に大きく依存します。

抽象的である場合、つまり、サブシステムが実際にお互いについて知る必要がない場合は、パブリッシュ/サブスクライブ ベースのメッセージング メカニズムが適切な場合があります。概要については、 https://en.wikipedia.org/wiki/Publish/subscribeを参照してください。ただし、概念はかなり単純明快である必要があると思います。

一方、サブシステムが本当に具体的な方法でお互いを知る必要がある場合、そもそもなぜサブシステムなのですか? この種のパーティショニングを行うことは、実際に関心が分離されていることを示しているため、抽象的なインターフェースを見つけることはそれほど難しくありません。そうであれば、サブシステムの責任を再考する必要があるかもしれません。

于 2012-02-16T21:23:42.913 に答える
0

デザインパターンの名前が思い出せませんでした。なぜ各サブシステムに他のサブシステムを知らせることができないのでしょうか?

s1.SetSubsystem2(s2);
s1.SetSubsystem3(s3); 
...

将来の変更に対する回復力を高めたい場合は、各サブシステムのインターフェイスを で記述し、interfaceSetSubsystemX が具象クラスではなくそのインターフェイスを使用するようにします。

編集: インターフェースの例。

最初のサブシステムが電子メールの送信方法を知っていて、2 番目のサブシステムがファイルの印刷方法を知っているとします。次の 2 つのインターフェイスを宣言する必要があります。

interface IEmailSubsystem
{
    void SendEmail(string content);
}

interface IPrintSubsystem
{
    void PrintFile(string path);
}

次に、2 つのサブシステム オブジェクトを定義できます。

class Subsystem1: IEmailSubsystem ...
class Subsystem2: IPrintSubsystem ...

3 つ以上のサブシステムが必要になる場合は、グローバル サブシステム レジストリが必要ですが、まだ心配する必要はありません。

于 2012-02-16T21:01:31.453 に答える