2

現在、約 10 個のメソッドを含むラッパー クラスがあり、そのうち 8 つのメソッドが ClassA の機能を提供し、2 つのメソッドが ClassB の機能を提供するため、ラッパー クラス コンストラクターで ClassA と ClassB をインスタンス化して、適切なメソッドで使用することを計画しています。

このデザインは問題ありませんか、それとも何か不足していますか? このアプローチの欠点の 1 つは、ユーザーが間違ったコンストラクター パラメーターを渡して間違ったメソッドを使用すると、呼び出し元のアプリが例外を受け取ることです。

以下のサンプルコードを参照してください。

Public class Wrapper
{
ClassA _a = null;
ClassB _b = null;

public Wrapper(bool createClassA)
{
  if (createClassA)
  {
     _a = new ClassA();
  }
  else
  {
     _b = new ClassB();
  }
}

public string Method1()
{
   return _a.ReturnSomething();
}

//similarly Method2 to Method8 calls _a class methods.

public void Method9()
{
   return _b.DoSomething();
}

public string Method10()
{
   return _b.ReturnTestMessage();
}
}

前もって感謝します。

4

3 に答える 3

5

一般的な関数を呼び出さない 2 つのクラスがあります。2 つのクラスはまったく異なることを行うため、それらをラッパー クラスに配置してもあまり意味がありません。

クラスが概念的にリンクされている場合 (これらのクラスを一緒に考える場合)、名前空間に配置する方が理にかなっているでしょうか?

namespace YourNamespace
{
    class ClassA
    {
        // ...
    }

    class ClassB
    {
        // ...
    }
}
于 2013-05-20T20:30:21.340 に答える
2

2 つのクラスを一緒にラップした方法は問題ありませんが (ish )、クラスの 1 つだけがインスタンス化されるという条件付きにした方法は問題ありません。ラッパー クラスは、透過的に使用できる必要があります。つまり、A または B について、またはそれがどのように構築されたかを知らなくても、ラッパー クラスの任意のメソッドを呼び出すことができます。

クラス A と B が異なる場合、それらをラップする必要があるかどうか疑問に思います。おそらく、ラッパー クラスが何らかの Facade または Adapter である場合を除きます。

于 2013-05-20T20:30:40.820 に答える