我举了以下例子来说明我的问题:
class B;
class A
{
public:
class B *pB;
};
class B
{
public:
void perform(A &obj)
{
}
};
在上面两节课中。类A有一个指向类B的指针。类B有一个可以在类A对象上工作的函数。虽然它可以编译,但我想知道这是不是一个很好的做法来设计两个类,因为它们交织在一起。如果这是一个糟糕的设计,你有什么想法可以避免吗?谢谢。
答案 0 :(得分:3)
让两个具体的课程直接相互依赖会让你陷入困境。
“编程到界面”通常更好。 在“程序到界面,而不是实现”的标题下进行了长时间的讨论here,其中提出了为什么解耦事项
在您的示例中,void perform(A &obj)
可以取一个A
派生自的抽象基类。可能值得拥有一个A
在其成员变量中使用的接口,但在您的示例中没有建议的用法继续使用。
为什么这“更好”?对于初学者来说,它会让你想到封闭 - 以及接口应该暴露的具体内容。
它还允许您使用该类的不同的实例,例如用于测试目的。
如果使用界面,可以单独更改conrete类......有很多优点。