はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【C#】ValueObject、そなたは美しい

はじめに

最近ValueObjectパターンなるものを知ったのですが、DDD(ドメイン駆動開発)で用いられる手法の一つのようです。

今回はメリット等には触れず、ValueObjectの作り方だけに注目していきたいと思います。

作り方

int value;

public class IntValueObject
{
    // Setterは使わない
    private int _value;

    public IntValueObject(int value)
    {
        // 不正な値は例外を投げる
        if (value < 0)
            throw new ArgumentException();

        // コンストラクタ内のみフィールドを変更
        _value = value;
    }

    // 許可した演算しかできないように
    public IntValueObject Add(IntValueObject x, IntValueObject y)
    {
        // 新しいインスタンスを返す
        return new IntValueObject(x._value + y._value);
    }
}

おまけでEntityについて

ValueObjectと同じモデルの表現方法としてEntityというものもあります。

Entityの特徴としては識別子が同じなら同一判定可変であることです。

さいごに

ValueObjectについてもっと知りたい方はこちらの記事をご覧ください。
qiita.com

qiita.com

後、公式ドキュメントも。
docs.microsoft.com

ぶっちゃけドメイン駆動開発は1mmも理解していないので,後でじっくりと調べてみたいと思います。

ではまた。