2017-01-23 10 views
0

У меня есть 3 проекта (C#) API, BLL и DAL. DAL ссылается на DAL и ссылку API на BLL.Использовать функции BLL без ссылки DAL в моем API

enter image description here

enter image description here

В моей API мне нужно использовать все функции CRUD, но я не могу использовать функцию из моего УСКА, потому что VS сказал, что «тип„блабли“определяются в сборку, на которую не ссылаются. Вам нужно добавить ссылку (DAL) ", но я не хочу ссылаться на проект DAL в API. Есть ли способ сделать это без использования моего проекта DAL?

+2

Вы должны ссылаться на свой основной проект DAL, если BLL зависит от него. В противном случае, как BLL найдет функции для вызова? Скомпилированный код DAL будет отсутствовать. Вот как это работает, не о чем беспокоиться. – ADyson

+0

Но вы BLL должны использовать DAL где-нибудь? – McNets

+0

@ADyson мой проект BLL использует DAL, но почему shoud я добавляю ссылку на DAL в API, если я отношусь к BLL в нем? –

ответ

1

На мой взгляд, то, что вы пытаетесь достичь, - это хороший способ архитектовать проект. Я тоже делаю то же самое; просто небольшая разница, которую я объясню ниже. Не ссылаясь на DAL в API, убедитесь, что каждый вызов DAL осуществляется только через BLL. Это необходимо, потому что я хочу разместить всю логику обработки данных в одном месте. Если он распространен, трудно найти проблемы.

У меня есть четыре проекта:

  1. Utils (ваш "блабли" материал идет здесь) [Ссылки ничего]
  2. ВВЛ (ваш материал базы данных здесь идет) [Ссылки Utils]
  3. BLL (ваш логика вещей здесь идет) [Ссылки DAL и Utils, если необходимо]
  4. Api (ваш API материал здесь идет) [Ссылки BLL и Utils, если необходимо]

Это односторонняя ссылочная цепочка. DAL => BLL => API. Ссылки в обратном порядке не должны существовать. Utils должно быть обычным явлением, в котором должны идти общие вещи, такие как объявления сущностей, исключения, перечисления.

Примечание: Если вы не ссылаетесь на DAL в API, вам необходимо его развернуть.

Чтобы избежать использования Utils в API, вам может потребоваться добавить еще один слой DTO и сопоставить их с объектами. См. Мой другой question на том же самом.