2012-03-16 5 views
0

私はUserEntityを持っていますが、それは最終的にはDBにそれがidというプロパティに従って保持されています。この場合、idプロパティは明らかに敏感です。これを変更すると、後で永続化するとUserEntityが別のUserEntityに保存されるためです。ドメインエンティティに必要なプロパティを処理する方法は?

私はので、この出来事のようなものに対して安全ガードを手助けしたいと思い

...

オプション1. Doが、私はid FORCEことにより、セッターを削除、コンストラクタに渡されますか?

  • これは(それがidの最低限の要件を持っているので)リポジトリが持続するように与えられているすべてのUserEntityが有効であろうことを意味します。
  • 欠点は、私のコントローラがそれを与えるためにidを持たないため、新しいUserEntity()を作成できないことです。持続されたもの、とするものその:

オプション2は、これは基本的に2つのUserEntityオブジェクトの種類を作成しますセッターに

  • を提供ヌルであることを、コンストラクタ内のIDを許可ではなく、していない。
  • 私は新しいUserEntity()をどこにでも置くことができ、それを値で埋めてリポジトリに渡し、それを保存し、新しいUserEntityを新しいidで作成して戻します。
  • これはクールですが、保存エンティティであることを確認するために、エンティティが永続化/ドメインロジック/ etcに使用する任意の場所にidがあることを再確認する必要があることを意味します。

オプション3.私はそれほど心配することはありませんか?

  • これはUserEntityのidの変更、DB内の異なるUserEntityを上書きする危険性を公開します。
  • 先ほどidを知らずに新しいUserEntity()を作成することができます。これは保存のためにリポジトリに渡すことができます。

答えて

3

ドメインオブジェクトの有効性を気にする場合は、常に有効性を確認する必要があります。

これは、直接変更したくないプロパティに対してセッターを提供せず、特定のメソッドを使用して状態を変更することを意味します。

例のidが変更されない場合は、これをコンストラクターでのみ設定して渡すようにしてください。

+0

ありがとうございます!この例では、明らかに、 'id'を正しいものに変更する方法はないでしょうか? – johnnietheblack

+0

@ johnnietheblack - 'id'の通常のコンテキストから、はい。あなたは突然変異を起こすが検証される必要があるプロパティのためのメソッドを提供するでしょう。 – Oded

+0

ありがとう:)意味があり、うまく気密です。 – johnnietheblack

関連する問題