8

私は現在リポジトリを作成していて、エンティティの削除操作の「ベストプラクティス」は何であるか疑問に思っていました。以下のオプションでは、makeとmodelがCarエンティティのキ​​ーを構成します。

オプション1:

deleteCar(Car car)

オプション2:

deleteCar(String make, String model)

オプション3:

deleteCar(CarKey carKey)

最初はオプション1を考えましたが、実際にはオプション2の方が魅力的です(削除メソッドに渡すためだけにIDしかない場合は、オブジェクトを取得する必要はありません)。私はそのようなものを見たのでオプション3を入れましたが、CarKeyは実際にはドメインオブジェクトではないので、それは私には正しくないようです。

考え?

4

2 に答える 2

4

オプション3。

CarKeyがドメインオブジェクトでなくてもかまいません(ただし、値オブジェクトでもかまいません)。そのアクションを実行するために必要なのはIDだけです。これは、CarがARの場合、リポジトリはGetItの方法と削除の処理方法を知っている必要があるためです。

于 2012-04-19T12:50:07.047 に答える
4

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

于 2012-04-26T19:50:19.657 に答える