2012-04-18 20 views
7

現在、リポジトリを作成していて、エンティティの削除操作のための「ベストプラクティス」が何であるか不思議でした。以下のオプションでは、makeとモデルがCarエンティティのキ​​ーを構成します。リポジトリはIDまたはエンティティ自体を渡してエンティティを削除/削除する必要があります

オプション1:

deleteCar(Car car) 

オプション2:

deleteCar(String make, String model) 

オプション3:私はオプション1考えまず

deleteCar(CarKey carKey) 

、実際にはオプション2はより魅力的です(私はidだけを持っていれば削除メソッドに渡すことができるので、オブジェクトを取得する必要はありません)。私はそれのようなものを見たので私はオプション3を置くが、CarKeyは実際にはドメインオブジェクトではないので、それは私にとって正しいようには見えない。

思考?

+2

エンティティがその値ではなくアイデンティティによって定義されているため、option2で別の車が削除される可能性があります。 –

+0

真。私はそれが重要ではないと想像していました。なぜなら、私がそれについて考えていた方法で、それが主キーだったからです。しかし、もしそうでなければ私はそれを見ることができます。 – testing123

答えて

4

オプション3.

CarKeyはドメインオブジェクトではないことは問題で(それはしかし値のオブジェクトにすることができます)、idはそのアクションが起こることをするためにあなたが必要とするすべてであることはありません。それは、CarがARの場合、リポジトリはGetItの方法と削除の処理方法を知っている必要があるからです。

3

DDDでrepositoryという定義を厳密に遵守している場合、リポジトリはインメモリコレクションをエミュレートするため、オプション1が使用されます。しかし、私はそれをリポジトリの重要なコンポーネントとは見なしておらず、あまりにも遠すぎると漏れやすい抽象化につながる可能性があります。一方、エンティティオブジェクト全体による削除を要求することは、リポジトリの発信者(アプリケーションサービスなど)が最初にIDによって削除されるエンティティを取得し、ビジネス上の問題に対処し、削除する必要があることを示すことができますそれ。 HibernateのようなORMはクエリによって削除することができるので、削除を呼び出すIDだけが必要ですが、データベースからエンティティをロードすることになります。

関連する問題