あなたは間違いなく物事を混乱させる人ではありません。:-)
質問に対する答えは、あなたがどれだけ純粋主義者になりたいかによると思います。
厳密な DDD の観点が必要な場合は、1 つの道をたどることになります。リポジトリを、サービスとデータベースを分離するレイヤーのインターフェイスを標準化するのに役立ったパターンと見なすと、別のことができなくなります。
私の観点から見ると、リポジトリはデータへのアクセスの明確に指定されたレイヤーです。つまり、データ アクセス レイヤーを実装するための標準化された方法です。異なるリポジトリ実装にはいくつかの違いがありますが、概念は同じです。
リポジトリに DDD 制約を追加する人もいれば、データベースとサービス層の間の便利なメディエーターとしてリポジトリを使用する人もいます。DAL のようなリポジトリは、サービス層をデータ アクセスの詳細から分離します。
それらを異なるものにしていると思われる実装上の問題の 1 つは、仕様を取るメソッドを使用してリポジトリが作成されることが多いことです。リポジトリは、その仕様を満たすデータを返します。私が見たほとんどの従来の DAL には、メソッドが任意の数のパラメーターを取る、より大きなメソッドのセットがあります。これは小さな違いのように聞こえるかもしれませんが、Linq と Expressions の領域に入ると大きな問題になります。デフォルトのリポジトリ インターフェイスは次のようになります。
public interface IRepository : IDisposable
{
T[] GetAll<T>();
T[] GetAll<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter, List<Expression<Func<T, object>>> subSelectors);
void Delete<T>(T entity);
void Add<T>(T entity);
int SaveChanges();
DbTransaction BeginTransaction();
}
これは DAL ですか、それともリポジトリですか? この場合、私はその両方を推測します。
キム