封装:我应该将对象的数据传递给另一个修改它的类吗?

时间:2016-03-22 16:28:11

标签: c++ class object encapsulation

我希望有类似下面的代码:

class Foo{

public:

    void update() {
        for( auto dataModifier : _dataModifierList ) {
            dataModifier.modify( Data& _data );
        }
    };

private:
    Data _data;
    std::vector<DataModifier> _dataModifierList;

};

因为我将Foo的数据发送到另一个修改它的类,这被认为是不好的封装吗?感觉就像我将Foo的内容暴露给DataModifier

我这样做的原因是因为我想为每个Foo实例注册一些DataModifier

1 个答案:

答案 0 :(得分:2)

如果DataModifier获取对Data对象的引用以便在适当的位置进行修改,那么从封装的角度来看它非常好。如果你让DataModifier Foo的朋友成为一个瑕疵,那么它可以随时更改其成员,而无需调用任何Foo的方法。如果您决定在Foo之外的某个地方存储对私有数据的引用,而不是将其传递给DataModifier,我也会认为它设计不好。