乐趣区

关于值对象的思考

使用 值对象 模式的好处。

  一般我们操控类内属性都是 get 和 set 方法,很常用也很好用。

class MyClass {
public:
    MyClass();

    void setProperty1(const QString &value);
    QString getProperty1() const;

    void setProperty2(const QString &value);
    QString getProperty2() const;}

  但是我们在操控类的过程中,自己不小心或第三方接口使用者 误调用 了 set 方法导致 MyClass 类内 状态发生变化,这个是我们不想要的。

  应该对类加以限制,那么该如何限制。这时候我们可以用 Builder 模式,它是一个只读对象,但 Builder 模式使用起来比较 繁琐

  有没有更简单的 只读对象 呢?
答案肯定的,就是使用 值对象 ,通过类的 构造函数 设置属性

class MyClass {
public:
    MyClass(const QString &property1,
            const QString &perperty2);

    QString getProperty1() const;
    QString getProperty2() const;};

  上面代码我们可以看到 MyClass 类不再提供设置属性的方法,只提供读的方法。如果需要设置 MyClass 类内属性只能通过 重新创建MyClass 的对象方式去设置,这方法就很好地避免被它人随便修改了。

  这种方法就像是 Http 请求 一样,无状态 ,用起来让人感觉踏实安心,但是它有一个致命的 缺点 是构造函数参数不能过多。

退出移动版