如果替代函数名称使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”一文,我想您会发现第二个示例是解决之道。
基本上,您不应该通过第一个示例所隐含的代码来扩展逻辑:
获取当前可见性值 根据值 做出决策更新对象。