【发布时间】:2021-08-25 11:55:09
【问题描述】:
在我的公司,我们从 XML 生成代码。代码生成器生成包含 Messages 的头文件,每条消息只包含数据。注意我们在设置或返回数据时不做任何验证;此外,我们不必关心状态,即数据 x 和消息中的数据是独立的;如果 x 改变了,我们不需要改变 y 的状态。
当前头文件
class somemessage
{
private:
Field _field;
.......
public:
Field& getfield(){...}
const Field& getfield() const {...}
void setfield(const Field& field){....}
} ;
如果只是数据,我们还需要在这里隐藏数据吗?我们是否需要在这些标头中使用 getter 和 setter,或者可以将其简化如下。
struct somemessage
{
Field field;
};
我们可以在需要时使用 const 将消息设为只读,如下所示。
void message_consumer(const somemessage& message)
{
message.field = somevalue; // compilation error
}
这种方法有什么缺点,使用访问器和修改器有什么优点?
【问题讨论】:
-
封装不是必须的。它有很多优点和一些缺点。是否应该使用它是基于意见的。
-
fwiw,恕我直言,getter 和 setter 封装出错了,您也可以将它们公开,尤其是当您返回引用时。一旦你返回一个非常量引用,所有的封装都会丢失
-
如果你有传递的 getter 和 setter,那么你就没有隐藏任何数据。
-
Getter/setter 对是封装和数据隐藏的对立面。
-
在更实用的优势方面,在许多 IDE 中设置函数断点比设置数据断点更容易。
标签: c++ oop functional-programming