如果替代函数名称使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,Do not Ask ",我想你会看到第二个例子是要走的路.
基本上,你不应该通过你的第一个例子隐含的代码传播逻辑,即:
获得当前的可见性值,
根据价值做出决定,
更新对象.
在这个例子中你给,show()
并hide()
让有很大的意义,至少对我来说.
另一方面,如果你有一个属性skinPigment
而你决定调用函数tanMe()
,makeAlbino()
这将是一个非常糟糕,非显而易见的选择.
这是主观的,你必须尝试思考你的用户(使用这个类的人)的想法.无论你决定哪种方式,它都应该是显而易见的,并且有充分的记录.