不确定如何提出一个好的设计

时间:2010-06-05 14:16:20

标签: c++ design-patterns class dependencies code-design

我在为一组课程设计一个好的设计时遇到了麻烦,并希望有人可以给我一些关于最佳实践的指导。我保持了类和成员函数的通用性,以使问题更简单。

基本上,我有三个类(让我们称之为A,B和C),如下所示:

class A
{
public:
  ...
  int GetX( void ) const { return x; };
  int GetY( void ) const { return y; };

private:
  B b;    // NOTE: A "has-a" B
  int x;
  int y;
};

class B
{
public:
   ...
   void SetZ( int value ) { z = value };
private:
   int z;
   C c;  // NOTE: B "has-a" C 
};

class C
{
public:
  ...
  void DoSomething(int x, int y){ ... };
  void DoSomethingElse( int z ){ ... };
};

我的问题如下:

  • A类在内部使用其成员变量“x”和“y”。
  • B类在内部使用其成员变量“z”。
  • B类需要调用C :: DoSomething(),但C :: DoSomething()需要传递的A类中X和Y的值作为参数。
  • C :: DoSomethingElse()从另一个类(例如D)调用,但它需要在B类中调用SetZ(。)。

正如你所看到的,由于所有课程都需要彼此的信息,所以有点混乱!我可以使用任何设计模式吗?任何想法都会非常感激....

2 个答案:

答案 0 :(得分:1)

不幸的是,正如你提出的那样,这是一个完全混乱。

class C中的方法定义为private,因此,只能在该类的其他方法中调用(除非您要添加friend声明并制作依赖性甚至更糟)。

我还认为您最好不要使用 这些通用名称 来粘贴代码,因为它可以帮助我们理解问题的域并提出一些好的架构建议。

请记住,许多优秀的应用程序架构方法已经发明并且您实际上不必重新发明它们,您应该只学习它们并使用它们他们。

答案 1 :(得分:1)

您遗漏了许多可能会改变此建议有效性的细节,但根据您显示的接口子集,看起来B应该有A或者可能从A派生,反之亦然。