2016-12-11 12 views
1

私は同じコードを持つ2つの状態が同じ状況ですが、ステータスが管理者によって追加することができ、ステータスのリストは、ユーザーインターフェイスに表示される必要があるため、ステータス値オブジェクトであることを思わステータスDDD:ステータス - 値オブジェクトまたはエンティティ?

public final class Status { 

     private int code; 

     public Status(int code) { 
      this.code = code; 
     } 

     public int getCode() { 
      return code; 
     } 
    } 

を持っています。ユーザーインターフェイスで自分の名前とステータスのリストを提供するために、

、私は

追加のラッパークラスを持っている
public final class AvailableStatuses { 
    private Status status; 
    private String name; 

    ... 
} 

public AvailableStatusesRepository { 
    ... 
} 

あなたはこのデザインについてどう思いますか?私はそれを調整し、エンティティとしてステータスを作成し、それに名前フィールドを入れる必要がありますか?

+0

(合成IDキーを持つエンティティは珍しい要件ではない)、一度割り当てられたIDを変更することができないことを警告して、エンティティとして扱うことができます私はあなたの '通貨'クラスを理解していません。例:通貨124とは何ですか?あるいは、コード値はISOコードで、124はカナダドル( 'CAD')ですか?もしそうなら、なぜ 'Currency'と' AvailableCurrency'を分離するのでしょうか?なぜ、内部ID、ISO番号、ISOコード、および説明を持つエンティティ '通貨 'をUIで維持できるのはなぜですか? – Andreas

+0

コードは、通貨、1 - USD、2 - EURなどの内部表現です。このために私はAvailableCurrencyラッパーを使用します。 – Teimuraz

+0

@アンドレアス、私は少し通貨の代わりに質問を変更しました。私はコンセプトをステータスに変更しました。私はそれが私の混乱をより明確に反映すると思います。 – Teimuraz

答えて

0

これは、モデル内の要素の記述子として使用されるため、値オブジェクトにする必要があります。それらはそれらの属性によって定義され、それらの属性(すなわち状態)はそれらの同一性を決定する。

+0

答えに感謝します。だから私はステータスオブジェクトをAvaliableStatusにラップし、私の例のようにリポジトリを使用してもよろしいですか? (私はユーザーインターフェイスでステータスのリストを提供する必要があり、管理者がステータスリストを管理できるようにするなど)。 – Teimuraz

+0

ステータスコンストラクタは整数コードと文字列名を取ることができますか? – alltej

+0

はい、何のためにですか? – Teimuraz

2

あなたの現在のデザインと簡単な答えはStatusは基本的にAvailableStatusのID(それのコード)のラッパーである値オブジェクト(VO)であるAvailableStatusが実体であるということでしょう。

あなたのモデルはおそらくまあまあですが、あなたが気づかなければならないことの1つは、エンティティを説明するために別の名前をつけなければならないということです。

これは、適切なBounded Context(BC)が不足している可能性があるためです。 Statusはエンティティになりますが、下流のコンテキストではVOになりますが、保守/管理/設定BCを持つことができます。

0

ステータスは値オブジェクトであり、IDだけでなく名前も含める必要があります。両方のフィールドは、使用のコンテキストにおいて不変である(すなわち、Statusフィールドを有するアイテムはStatusオブジェクトを変更することができない)。ラッパークラスは不要です。自分の管理アプリケーションのコンテキストにおいて

は、ステータス

関連する問題