В какой слой я должен поместить свой репозиторий? - PullRequest
7 голосов
/ 30 августа 2010

Сценарий

Уровень доступа к данным

  • .EF, сгенерированные EF и классами
  • Используется только для доступа к базе данных SQL и передачи данных на бизнес-уровень

Бизнес-уровень

  • Бизнес-объекты: содержат всю логику проверки, отмеченную атрибутом [DataContract], чтобы их можно было передавать в качестве параметров моему веб-сервису

Проблема

Я хочу использовать шаблон хранилища с этим подходом.Репозиторий будет содержать все операции CRUD, которые должны быть выполнены с базой данных, принимая и возвращая сущности бизнес-уровня.Это означает, что хранилище будет находиться на бизнес-уровне, поскольку только бизнес-уровень может ссылаться на уровень данных, а не наоборот.Я также планирую использовать сборку слоя данных в других проектах, поэтому я хотел бы иметь хранилище на уровне данных, а не на бизнес-уровне (что характерно для этого проекта).Что вы порекомендуете?Должен ли я сохранить хранилище на бизнес-уровне и написать его для каждого бизнес-уровня?Или я должен хранить репозиторий внутри уровня данных , не принимая или не возвращая бизнес-объекты.Или, в качестве альтернативы, кто-нибудь может порекомендовать другой подход, который позволил бы получить более логичную, масштабируемую архитектуру?Спасибо за чтение, жду ответов

Ответы [ 3 ]

7 голосов
/ 30 августа 2010

Репозиторий - это абстракция над уровнем данных, чтобы обеспечить постоянное невежество вашего приложения.Это должно касаться только доступа к данным и ничего более.Он не должен иметь любой бизнес-логики.

Хранилище может и должно принимать и возвращать DTO (объекты передачи данных) - это простые объекты, которые не имеют своего собственного поведения и используютсяпередавать данные между слоями.

Я бы поставил между DAL и BLL и использовал бы его только для доступа к данным из BLL.

3 голосов
/ 18 сентября 2015

Мне нравится принятый ответ. В идеале, иметь полностью слой, посвященный хранилищам, звучит правильно.

Но я думаю, что в традиционном трехуровневом приложении (например, «Данные-> Бизнес-> Пользовательский интерфейс») я бы вставил хранилища в слой данных. Причина, по которой я бы поместил их в Уровень данных, заключается в том, что они имеют дело исключительно с доступом к данным. Причина, по которой я НЕ поместил бы их в бизнес-уровень, заключается в том, что они НЕ должны иметь никакой бизнес-логики.

0 голосов
/ 22 декабря 2018

Я думаю, что интерфейс репозитория должен быть на бизнес-уровне, но реализация этого интерфейса должна быть на уровне данных.Интерфейс включает модульное тестирование, но реализация репозитория не входит в обязанности бизнес-уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...