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

Encapsulation: Should I pass an object's data to another class which modifies it?

我想要类似下面的代码:

class Foo{

public:

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

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

};

因为我正在将 Foo 的数据发送到另一个修改它的 class,这是否被视为封装不良?感觉我把Foo的内容暴露给了DataModifier

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

如果 DataModifier 获得对 Data 对象的引用以就地修改它,从封装的角度来看,它非常好。如果您将 DataModifier Foo 设为友元,这样它就可以随时更改其成员,而无需调用 Foo 的任何方法,这将是一个缺陷。而且,如果您决定将对私有 data_ 的引用存储在 Foo 之外的某处,而不是将其传递给 DataModifier,我也会认为这是糟糕的设计。