Почему в проекте можно обратится к зависимостям подключенной dll?

140
21 июля 2019, 01:30

Всем привет!Сразу извиняюсь, если очень глупо задал вопрос.

Суть проблемы:

Практикую трехслойную архитектуру. DAL->BLL->WEB. Все зависимости идут по порядку.

Однако, когда я добавил в слой WEB ссылку на BLL. Этот слой стал давать возможность обращаться к DAL слою. Подскажите в чем проблема. Все слои делаются на .net core 2.2.

Answer 1

Вам уже ответили в комментариях @PashaPash, давайте оформим ответом:

Подключая dll, вы неявно подключаете все её зависимости. Так задумано.

Также вы спрашиваете:

слой представления не должен знать о слое с данными

У вас есть слой DAL и BLL, но не выделен слой Domain.

Если вы в домен вынесете модели и интефейсы, то BLL не будет зависеть от конкретной реализации DAL, а будет вся на интерфейсах и в WEB вы можете подключать BLL и какую-то конкретную реализацию DAL (их может быть несколько - dal на EF, dal на dapper).

Конкретный пример такого приложения есть в книге Марка Симана Dependency Injection in c#

На гитхабе есть этот проект, см. тут: https://github.com/djhmateer/3Commerce.git

Делая по такому шаблону вы можете дойти до такого момента, что у вас не останется в WEB никаких ссылок на DAL, лишь только в конфигурационном файле будет строкой прописано какой DAL подключить.

На практике я обычно применяю менее строгий подход: у меня подключен проект конкретного DAL'а, но в проекте WEB ссылка на него фигурирует лишь один раз: я указываю при resolve зависимостей саму сборку.

        var dataAccessAssembly = typeof(DataContext).Assembly;

Меня такой подход вполне устраивает: и гайдланы соблюдены и если вдруг понадобится (ни разу не понадобилось) поменять конкретную реализацию DAl то сделать это будет достаточно просто.

READ ALSO
GroupBy работает не корректно в IQueryable

GroupBy работает не корректно в IQueryable

Работаю с Entity FrameworkЕсть класс

138
Вызов алерта после редиректа

Вызов алерта после редиректа

У меня есть форма на которой выполняется ajax запрос, в итоге выполнения происходит перенаправление на другую страницу$(location)

229
C# прокси сервер авторизация

C# прокси сервер авторизация

в приложение есть форма где заполняется хост,порт, логин и пароль

184
Запись данных PHP в файл txt

Запись данных PHP в файл txt

Есть чекбоксы (их порядка 50 штук), которые передают данные в php файл, и эти данные нужно сохранить, я что то наковырял, и получается что после...

150