Ти точно не той, хто плутає речі. :-)
Я думаю, що відповідь на запитання залежить від того, наскільки ви хочете бути пуристом.
Якщо ви хочете суворої точки зору DDD, це відведе вас на один шлях. Якщо ви подивитесь на сховище як на зразок, який допоміг нам стандартизувати інтерфейс шару, який розділяє між службами та базою даних, він зніме вас ще одним.
З моєї точки зору, сховище - це лише чітко визначений рівень доступу до даних. Інакше кажучи, це стандартизований спосіб реалізації вашого рівня доступу до даних. Існують деякі відмінності між різними реалізаціями сховища, але концепція однакова.
Деякі люди будуть розміщувати більше обмежень DDD на сховищі, а інші використовуватимуть сховище як зручний посередник між базою даних та рівнем обслуговування. Сховище, таке як DAL, ізолює сервісний рівень від особливостей доступу до даних.
Одне з питань впровадження, яке, схоже, робить їх різними, полягає в тому, що сховище часто створюється методами, які беруть специфікацію. Сховище поверне дані, які відповідають цій специфікації. Більшість традиційних 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 або сховище? У цьому випадку я здогадуюсь і того, і іншого.
Кім