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