我有一个在类 A
中的方法 FOO()
,它的参数包括来自于类 B
的数据成员和其他东西(假设它们是两个浮点数和一个整数)。根据我的理解,通常最好使用以下方式实现:
A->FOO1(B, other_data_x)
而不是
A->FOO2(B.member1, B.member2, B.member3, other_data_x).
我了解到这种方法的一个优点(但不是唯一的优点)是,它将访问B
的哪些成员的细节留给了FOO1()
,从而有助于隐藏实现细节。
但我想知道的是,这是否确实在类A
和B
之间引入了额外的耦合。在前一种情况下,类A
必须知道类B
的存在(通过诸如include class_B_header.h
之类的方式),如果B
的成员发生更改或被移动到其他类中,或者类B
被完全删除,则必须相应地修改A
和FOO1()
。相比之下,在后一种方法中,FOO2()
并不关心类B
是否存在,事实上,它所关心的只是它提供了两个浮点数(在本例中包括B.member1
和B.member2
)和一个整数(B.member3
)。当然,在后一种示例中也存在耦合,但这种耦合由调用FOO2()
的任何类或正在调用FOO2()
的类处理,而不是在A
或B
的定义中。
我想问的第二部分问题是,是否有良好的方法可以进一步解耦A
和B
,当我们想要实现类似FOO1()
的解决方案时?