C# の record 型を DDD の ValueObject として使う時の初期化時チェックについて

3018 ワード

ValueObject を初期化時にチェックロジックをいれて例外を発生させたい場合、少し悩みました。
自分なりの解決策としては、プロパティを上書きして、初期化するところにチェックロジック用のメソッドをいれる作戦にしてみました。

例えば、

public record Name(string Value);

のような record 型 の ValueObject の場合、

public record Name(string Value)
{
    public string Value { get; private set; } = Check(Value);

    private static string Check(string value)
    {
       if (value == null)
       {
          throw new ArgumentNullException();
       }
       return value;
    }
}

としてみました。