如果替代函数名称使API更明显,那么放弃getter和setter的“getMyValue()”和“setMyValue()”模式是否合适?

例如,假设我在C++中有此类:


public class SomeClass {
private:
    bool mIsVisible;

public:
    void draw();
    void erase();
}

我可以添加函数来获取/设置“mIsVisible”,如下所示:

bool getVisible() { return mIsVisible; };

void setVisible(bool visible) { if (!mIsVisible && visible) { draw(); } else if (mIsVisible && !visible) { erase(); }

mIsVisible = visible;

}

但是,也可以改用以下方法:

bool isVisible() { return mIsVisible; };

void show() {
    if (!mIsVisible) {
        mIsVisible = true;
        draw();
    }
}

void hide() {
    if (mIsVisible) {
        mIsVisible = false;
        erase();
    }
}

简而言之,最好有一个“setVisible(bool)”方法,还是一对“show()”和“hide()”方法?是否有约定,还是纯粹是主观的?

最佳答案

在Pragmatic Programmers网站上阅读了“Tell, Don't Ask”一文,我想您会发现第二个示例是解决之道。

基本上,您不应该通过第一个示例所隐含的代码来扩展逻辑:

  • 获取当前可见性值
  • 根据值
  • 做出决策
  • 更新对象。
  • 08-25 21:10