LINQ против уровня доступа к данным

10

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

Для большинства моих домашних проектов я бы использовал свой собственный ORM, который я всегда создавал с открытым исходным кодом. Однако с тех пор стал доступен LINQ, который был очень похож на работу моего ORM (но ... лучше).

Ранее я ничего не мог сделать со своим собственным ORM, чего не могу сделать сейчас с LINQ (кроме фрагментов REST-интеграции). Итак, мой вопрос: LINQ мой новый уровень доступа к данным? Нужен ли мне этот слой вообще? Должен ли мой BLL просто общаться напрямую с LINQ? Или это все еще плохая практика?

Редактировать:

Первоначальный вопрос касался LINQ to Entities, но есть много интересных ответов относительно LINQ to SQL. Что думают люди о них обоих? Я понимаю, что LINQ to SQL не может заменить DAL, но может ли Entity Framework?

Коннелл
источник

Ответы:

7

Хотя вы можете просто поместить запросы LINQ в свой BLL, это может привести к дублированию кода. Я все еще буду создавать репозитории, которые будут оберткой для запросов LINQ. Это отделит код базы данных от кода BLL и будет полезно, когда вы решите изменить свой код доступа к данным (т. Е. Перейти к Dapper или предварительно скомпилированным запросам).

Это также поможет с модульным тестированием , так как репозитории могут быть легко смоделированы.

Якуб Конецки
источник
6

У вас все еще может быть DAL, только он может использовать LINQ to SQL вместо того, что вы использовали ранее. Вот как я это делаю в любом случае. Не заставляйте свой BLL напрямую использовать LINQ to SQL для доступа к данным.

neeKo
источник
Я согласен, LINQ to SQL - это просто язык запросов, который может помешать вам писать много кода. Он не инкапсулирует доступ к данным в вашем приложении, как DAL.
Неонтапир
Я действительно имел в виду LINQ to Entities. Я также использую много LINQ to Objects, но считаю, что это бизнес-логика. Я понимаю закулисную разницу между сущностями и LINQ to SQL, но я никогда не использовал LINQ to SQL. Есть ли различия в синтаксисе?
Коннелл
2

Linq не касается доступа к данным, вы можете использовать linq для любого IEnumerable.

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

На этом уровне доступа к данным вы можете использовать свой собственный ORM или использовать Linq для sql, это не имеет значения, если уровень доступа к данным реализует определенные вами репозитории.

Томас Янссон
источник
1

Если вы не хотите, чтобы ваш «уровень бизнес-логики» учитывал транзакции и производительность запросов, все еще существует необходимость в DAL.

LINQ делает объявление запроса процессом времени разработки (он же проверен компилятором).

Поставщики запросов LINQ (такие как LinqToSql и LinqToEntities) по-прежнему выполняют преобразование этих объявленных запросов в текст SQL во время выполнения. Затем СУБД все еще выполняет интерпретацию запросов во время выполнения, генерацию плана запросов во время выполнения и т. Д.

Это лишь малая часть DAL.

Эми Б
источник