虽然我用 C++ 编写了这个示例,但这个代码重构问题也适用于任何支持 OO 的语言,例如 Java。
基本上我有一个A类
class A
{
public:
void f1();
void f2();
//..
private:
m_a;
};
void A::f1()
{
assert(m_a);
m_a->h1()->h2()->GetData();
//..
}
void A::f2()
{
assert(m_a);
m_a->h1()->h2()->GetData();
//..
}
你们会创建一个m_f
持有指针的新私有数据成员m_a->h1()->h2()
吗?我可以看到的好处是它有效地消除了多级函数调用,这确实大大简化了代码。
但是从另一个角度来看,它创建了一个“不必要的”数据成员,可以从另一个现有的数据成员中推导出来m_a
,这有点多余?
我只是在这里进退两难。到目前为止,我无法说服自己使用其中一个。
大家更喜欢哪一个,有什么理由吗?