İşleri karıştıran kesinlikle sen değilsin. :-)
Sanırım sorunun cevabı ne kadar saf olmak istediğinize bağlı.
Katı bir DDD bakış açısı istiyorsanız, bu sizi bir yola götürecektir. Depoya, hizmetler ve veritabanı arasında ayrılan katmanın arayüzünü standartlaştırmamıza yardımcı olan bir model olarak bakarsanız, sizi başka bir yere götürecektir.
Benim bakış açıma göre veri havuzu, verilere erişim için açıkça belirlenmiş bir katman veya başka bir deyişle Veri Erişim Katmanınızı uygulamanın standartlaştırılmış bir yoludur. Farklı depo uygulamaları arasında bazı farklılıklar vardır, ancak konsept aynıdır.
Bazı kişiler depoya daha fazla DDD kısıtlaması koyarken, diğerleri depoyu veritabanı ile hizmet katmanı arasında uygun bir aracı olarak kullanacaktır. DAL gibi bir havuz, hizmet katmanını veri erişim özelliklerinden ayırır.
Bunları farklı kılan bir uygulama sorunu, bir havuzun genellikle bir spesifikasyon alan yöntemlerle oluşturulmasıdır. Depo, bu spesifikasyonu karşılayan verileri döndürecektir. Gördüğüm çoğu geleneksel DAL, yöntemin herhangi bir sayıda parametre alacağı daha büyük bir yöntem setine sahip olacaktır. Bu küçük bir fark gibi görünse de, Linq ve İfadeler alemlerine girdiğinizde büyük bir sorun. Varsayılan depo arayüzümüz şuna benzer:
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();
}
Bu bir DAL mı yoksa bir depo mu? Bu durumda her ikisi de sanırım.
Kim