没有自己的get方法的set方法是不好的做法吗?
Is it bad practice to have a set method without its own get method?
假设我有一个类(名称circle是随机的,没有意义):
Class circle{
double colorFrequency_;
public:
void setColor(double colorFrequency){ colorFrequency_=colorFrequency; }
void setColor(string colorName){ colorFrequency_=colorNameToFrequency(string colorName); }
double getColorFrequency()
string getColorName(){ /* converts color frequency into a string containing the name of a color it's close to, like "red" */ }
}
一方面,有一个叫做setColor的方法而不是一个叫做getColor的方法似乎不一致,但另一方面,如果我要代替函数setColorFrequency和setColorName,那么这些名字将不是完全描述性的,因为setColorName不仅会影响getColorName的输出,还会影响setColorFrequency的输出。
是太奇怪了,有一个函数叫setColor,但没有一个叫getColor?
这取决于您是否希望成员值由您的类的用户获得。
无论是否与众不同,你都应该坚持你的设计需求。
您可能需要SetModel()
功能但GetModel()
没有意义的一个著名设计是:模型-视图-演示器(MVP)模式或其变体(如MVC, MVVM等)
在过去的一年里,我主要致力于UI,在那里我实现了遵循Prism架构(WPF和Silverlight)的MVP。我们的设计是这样的:
//C# code, but this design can written in C++ as well
public class QueryPresenter : IQueryPresenter, /*other interfaces */
{
public QueryPresenter(IQueryView view, /*other parameter*/)
{
//...
view.SetModel(this);
}
}
也就是说,它的呈现者调用视图的SetModel
函数来设置自己为视图的模型,但在视图类中没有GetModel
函数,因为它根本没有意义。
所以,是的,这完全取决于你可能需要set函数的设计,但get函数可能没有意义。通常,这样的set函数用于"配置"对象,这些对象将以其他方式使用,如MVP模式。集合函数也可以用在很少类以协作方式工作的设计中。这些类可以是彼此的friend
,这样它们就可以访问彼此的private
成员(如果需要的话)。
我不知道这有多奇怪,但是可以考虑将mutator重命名为changeColor
(或类似的不同),以更清楚地表明没有getter/setter"配对"。
我个人更倾向于让转换完全独立于Circle
,让调用者处理它:
double colorNameToFrequency(const string& name) { ... }
string colorFrequencyToName(double frequency) { ... }
class Circle
{
double colorFrequency_;
public:
void setColor(double colorFrequency);
double getColor() const;
};
// Client code
Circle c;
c.setColor(colorNameToFrequency("mint-green"));
string name = colorFrequencyToName(c.getColor());
这使得Circle
类独立于您选择的任何人类可读的颜色格式。
- 将 std:set<int32_t> 复制到 std::set <uint32_t>的好方法
- 使用Set/Get-like方法或GetSet组合函数
- 在std :: Map或std :: set中找到具有给定前缀的键的优雅方法
- 返回get/set方法中的向量
- 如何实例化多个 set 对象来测试 Set 类的各种构造函数和方法
- 删除 std::set<Node *> 中的元素的正确方法
- 为什么 c++ 中没有重复的 protobuf 字段的 Set 方法
- 公共全局变量或get()和set()方法
- 在C++中编写简单的 get/set 方法时,是否应始终使用 const 引用作为参数
- C++通过ref返回成员的方法和get-set方法之间的差异
- 将 set 方法与指针/类一起使用
- C++类和对象使用set方法获得用户输入
- 封装设计气味与get/set方法
- 在std::set/std::map中存储具有多个不同类型字段的c++对象的有效方法
- 如何返回“set”方法的子类类型
- 如何在c++中使用get和set方法来初始化一个用new初始化的对象?
- 为什么C++ STL set 容器的 count() 方法被命名为这样?
- c++ set/get方法同步
- 获取std::set子集的有效方法
- 传递NULL与分配空std::set传递给方法的可行性和性能