通常、リポジトリは次のいずれかの方法で実装されていることに気付きました。
方法 1
void Add(object obj);
void Remove(object obj);
object GetBy(int id);
方法 2
void Save(object obj); // Used both for Insert and Update scenarios
void Remove(object obj);
object GetBy(int id);
方法 1 にはコレクションのセマンティクスがあります (これがリポジトリの定義方法です)。リポジトリからオブジェクトを取得して変更できます。ただし、コレクションを更新するようには指示しません。この方法でリポジトリを実装するには、メモリ内オブジェクトに加えられた変更を永続化するための別のメカニズムが必要です。私の知る限り、これは Unit of Work を使用して行われます。ただし、システムでトランザクション制御が必要な場合にのみ UoW が必要であると主張する人もいます。
方法 2 では、UoW が不要になります。Save() メソッドを呼び出すと、オブジェクトが新規で挿入する必要があるか、変更されて更新する必要があるかを判断できます。次に、データ マッパーを使用して、データベースへの変更を永続化します。これにより作業がはるかに楽になりますが、モデル化されたリポジトリにはコレクションのセマンティクスがありません。このモデルには DAO セマンティクスがあります。
私はこれについて本当に混乱しています。リポジトリがオブジェクトのメモリ内コレクションを模倣する場合、方法 1 に従ってモデル化する必要があります。
これについてどう思いますか?
モッシュ