2

现在我有一个包装类,其中包含大约 10 个方法,其中 8 个方法为 ClassA 提供功能,2 个方法为 ClassB 提供功能,所以我计划在包装类构造函数中实例化 ClassA 和 ClassB,以便在适当的方法中使用它们。

这个设计好还是我错过了什么?我知道这种方法的一个缺点是,如果用户传递了错误的构造函数参数并使用了错误的方法,调用应用程序将收到异常。

请参阅下面的示例代码:

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

您有两个不调用任何常用函数的类。将它们放在包装类中没有多大意义,因为这两个类做了完全不同的事情。

如果这些类在概念上是联系在一起的(你认为这些类在一起),那么也许将它们放在命名空间中会更有意义?

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

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

您将两个类包装在一起的方式很好(ish),但是您以仅实例化 1 个类为条件的方式不行。包装类应该是透明可用的。这意味着您可以在不知道 A 或 B 或它是如何构造的情况下调用包装类上的任何方法。

如果 A 类和 B 类是不同的,那么我会质疑您是否需要包装它们。除非你的包装类是某种 Facade 或 Adapter。

于 2013-05-20T20:30:40.820 回答
0

这是非常通用的代码,因此很难为您提供建议。你觉得这个包装器给你的用户带来了什么好处?

您对使用错误构造方法的一个具体问题可以通过createClassA在方法内部进行存储和检查,或者通过在每个method_X_方法中检查 _b 或 _a 与 null 来解决。

或者,如果调用者调用“不正确”的包装方法而不是根本不返回任何内容、null 或空字符串(等),则包装器可能会更好地显式抛出异常。

于 2013-05-20T20:31:10.117 回答