今AreaIdクラスにはコンストラクタとValue,そしてEqualsCoreがありますが,これだけだと,Valueしか表現できていないので,あまり意味のあるValueObjectではありません。ここにビジネスロジックを入れていきましょう。
ビジネスロジックとは?
ビジネスロジックとは,AreaIdの値に対して処理をしているものを指します。今回であれば,MeasureEntityのAreaIdに対してLatestViewModelで編集処理を行っています。この処理をAreaIdクラスに移すことで,処理が一元化されます。
次の部分がLatestViewModelに存在するAreaIdに対する編集ロジックです。これはアプリケーション全体で共通にしたいので,AreaIdクラスに移します。
namespace NDDD.Domain.ValueObjects { public sealed class AreaId : ValueObject { public AreaId(int value) { Value = value; } public int Value { get; } public string DisplayValue => Value.ToString().PadLeft(4, '0'); protected override bool EqualsCore(AreaId other) { return this.Value == other.Value; } } }
これでAreaIdのDisplayValueを呼び出せば,アプリケーション全体で統一した編集ができるようになります。 このような感じでValueObject化して,ビジネスロジックをValueObjectに移していきます。