Ты определенно не тот, кто путает вещи. : -)
Я думаю, что ответ на вопрос зависит от того, насколько пуристом вы хотите быть.
Если вам нужна строгая точка зрения 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 или хранилище? В этом случае я думаю, что оба.
Kim