Насколько я узнал, IRepository
должен содержать CRUD
. Тогда мы наследуем это IRepository
в наших других интерфейсов , как IProduct
и реализовать IProduct
конкретный класс ProductRepository
, с методами , как GetAllProducts()
, Top5Products()
.
Мы также можем сделать то же самое с n-уровневой архитектурой. как, создание DAL Class Library
и в нем определить класс Product
с методами , как GetAllProducts()
, Top5Products()
.
В обоих DAL.Product
и Repo.ProductRepository
классах мы инициализируем DB Context
из Entity Framework
и запросов наших соответствующих данных.
Вызов похож в обоих Repo.ProductRepository
или DAL.Product
методы изBLL
Ввиду этих сходств, мой вопрос, в чем выгода Repos? Я могу сделать то же самое с большой легкостью , используя многоуровневые архитектуры с ( Controller
, BLL Class Library
, DAL Class Library
).
Ответы:
Мое понимание таково:
DAL (Уровень доступа к данным) относится к уровню в вашем программном обеспечении, который находится между вашей технологией персистентности и логикой вашего приложения. Его цель - отделить проблемы доступа к данным от остальных проблем вашего приложения. Это общая концепция.
Репозиторий - это концепция DDD (Domain Driven Design).
В DDD Репозиторий отвечает за инкапсуляцию всех проблем доступа к данным для данного Агрегата . Это связано с необходимостью обеспечения согласованности во время чтения и записи Агрегата. А Агрегат - это группа связанных сущностей (например
Product
,Store
и т. Д.).Таким образом, репозиторий особенно осведомлен о проблемах постоянства и согласованности своего Агрегата. Ваш общий DAL, скорее всего, будет состоять из определенных репозиториев
TL; DR;
источник
Вы сравниваете два разных и взаимодополняющих понятия:
DAL в вашем примере
Интересно, что в вашем примере библиотеки классов,
DAL.Product
похоже, хранилище. Поэтому нормально, что вы на самом деле не видите разницы: с точки зрения реализации это то же самое (в данном конкретном случае).Но это не обязательно; DAL может быть реализован по-другому, например:
Чем отличается репозиторий
Концепция хранилища не зависит от архитектурной модели и реализации. Вам не нужно думать о слоях или базе данных. Все, что вам нужно знать, когда вы разрабатываете свой домен, это то, что ваши объекты находятся в репозиториях, которые представляют собой особый вид коллекции, которая предлагает постоянство. Это делает их очень подходящими для проектирования доменов и объясняет, почему они являются ключевым элементом доменного дизайна .
В DDD к хранилищам предъявляются еще несколько правил: они предоставляют доступ к агрегатам (независимому объекту или группе связанных объектов, зависящих от корня агрегата), и для агрегата существует один репозиторий.
источник