DDD:列挙型エンティティ

提案された構造は問題ないようです。 (用語の余談:State 以降 値オブジェクトではなく、ID を持っています 、むしろエンティティ .)

列挙型はコードのにおいがするので、その道を歩もうとしないでください。 State パターンを使用して動作を State オブジェクトに移動する方が、はるかにオブジェクト指向です。

書く代わりに

if (person.State == State.Working)
    // do something...

コード全体で、これにより次のように記述できます

person.State.DoSomething();

これにより、よりクリーンになり、必要に応じて新しい州を追加できるようになります。


私の以前の質問で、あなたの質問に関連すると思われるいくつかの有用なリンクが見つかりました。特に、列挙型クラスに関するジミー ボガードの議論です。


列挙型に値 0 の「不明」要素を含めることは一般的な方法です。本当に必要な場合は、これを実行して新しい状態に使用できます。

しかし、あなたが説明しているのはビジネスロジックです...新しいオブジェクトを作成した後の状態の設定は、クラス自体ではなく、ビジネスロジック層で行われるべきです.