Я всегда учил себя обрабатывать любой код доступа к данным в совершенно отдельном «слое» для моей бизнес-логики и кода пользовательского интерфейса. Это всегда было очень хорошей архитектурой для меня, и любые «правила» или лучшие практики, которые я вижу, все еще вписываются в этот стиль кодирования, особенно в Принцип единой ответственности .
Для большинства моих домашних проектов я бы использовал свой собственный ORM, который я всегда создавал с открытым исходным кодом. Однако с тех пор стал доступен LINQ, который был очень похож на работу моего ORM (но ... лучше).
Ранее я ничего не мог сделать со своим собственным ORM, чего не могу сделать сейчас с LINQ (кроме фрагментов REST-интеграции). Итак, мой вопрос: LINQ мой новый уровень доступа к данным? Нужен ли мне этот слой вообще? Должен ли мой BLL просто общаться напрямую с LINQ? Или это все еще плохая практика?
Редактировать:
Первоначальный вопрос касался LINQ to Entities, но есть много интересных ответов относительно LINQ to SQL. Что думают люди о них обоих? Я понимаю, что LINQ to SQL не может заменить DAL, но может ли Entity Framework?
источник
Linq не касается доступа к данным, вы можете использовать linq для любого
IEnumerable
.Вы пытались спроектировать свое приложение, не думая сначала о базе данных? То есть реализуйте свое приложение и используйте какой-нибудь репозиторий. Затем вы используете любую технику для реализации этих репозиториев. Таким образом, у вас есть полностью отделенное решение, где вы можете подключить любой слой доступа к данным, какой захотите.
На этом уровне доступа к данным вы можете использовать свой собственный ORM или использовать Linq для sql, это не имеет значения, если уровень доступа к данным реализует определенные вами репозитории.
источник
Если вы не хотите, чтобы ваш «уровень бизнес-логики» учитывал транзакции и производительность запросов, все еще существует необходимость в DAL.
LINQ делает объявление запроса процессом времени разработки (он же проверен компилятором).
Поставщики запросов LINQ (такие как LinqToSql и LinqToEntities) по-прежнему выполняют преобразование этих объявленных запросов в текст SQL во время выполнения. Затем СУБД все еще выполняет интерпретацию запросов во время выполнения, генерацию плана запросов во время выполнения и т. Д.
Это лишь малая часть DAL.
источник