#linq #frameworks #data-access-layer
Вопрос:
просто хотел собрать разные идеи и точки зрения относительно того, на какой уровень (и почему) должен (и почему) попадать LINQ?
Ответ №1:
LINQ = Запросы, интегрированные в язык. Это расширения запросов, которые позволяют запрашивать все, что угодно, от баз данных до списков/коллекций в XML. Язык запросов полезен на любом уровне.
Однако многие люди называют LINQ to SQL просто «LINQ». В этом контексте комбинированный BLL/DAL имеет смысл, когда вы используете L2S, и именно там вы выполняете запросы LINQ к своей базе данных. Это, конечно, не исключает выполнения последующих запросов к результатам тех же запросов в новых запросах (Linq to objects) на более высоких уровнях…
Ответ №2:
это зависит от того, что вы хотите сделать с linq. при использовании linq2sql я бы рекомендовал DAL, но Linq-это больше, чем просто доступ к базе данных. вы можете использовать его для управления списками, номерами бизнес-объектов и так далее… Сам Linq может быть полезен везде в вашем приложении.
Ответ №3:
Я рассматриваю ваш объект, производный от DataContext, как сам слой DAL, и LINQ-это просто очень гибкий интерфейс для него. Поэтому я использую запросы LINQ непосредственно на бизнес-уровне.
Ответ №4:
Оба. DataContext-это DAL, и при использовании конструктора автоматически создаваемые частичные классы, которые сопоставляются с объектами SQL (таблицами,представлениями), могут рассматриваться как часть вашего бизнес-уровня. Я реализую частичные классы, которые реализуют некоторые из частичных методов для обеспечения проверки и безопасности по мере необходимости. Некоторые бизнес-правила не отображаются непосредственно на объекты БД и обрабатываются с помощью других классов.
Ответ №5:
Я думаю, что если вы делаете Linq для Sql, вы всегда должны делать это в своем DAL. Однако, если вы выполняете Linq для объектов, где вы просто фильтруете, играя с другим объектом, вы можете сделать это на уровне BL.
Ответ №6:
Я думаю, что LINQ должен быть очень низкого уровня (DAL), и я думаю, что он должен быть завернут в BLL.
Я знаю, что многим людям нравится использовать частичную доступность моделей, создаваемых LINQ to SQL, но я думаю, что у вас должно быть четкое разделение интересов (видите, что я там сделал?). Я думаю, что если у вас будет бизнес-логика, она должна быть полностью отделена от вашей логики доступа к данным.
Я думаю, что сложность заключается в том, что вы можете продолжать связывать эти методы расширения LINQ в любом месте, где у вас есть используемая система.Строка Linq в вашем коде. Опять же, хотя я думаю, что LINQ соответствует определению и должен быть на как можно более низком уровне. Это также значительно упрощает тестирование TDD/Unit, когда вы заключаете использование LINQ в BLL.
Ответ №7:
Я использую linq в традиционном «уровне доступа к данным» или в «объектах доступа к данным». Это позволяет модульизировать код, продвигает код данных в одном месте (по сравнению с вырезанием и вставкой одного и того же кода в несколько разных мест) и позволяет относительно легко разрабатывать другой интерфейс.
Ответ №8:
Это зависит от архитектуры вашего приложения, и имеет огромное значение, насколько модель представления соответствует модели данных. Я согласен с отделением операций бизнес-логики от объектов данных и методов доступа, созданных LINQ. Я также склонен заключать все операции на уровне данных в класс менеджера, чтобы сделать контекст данных внутренним классом.
Ответ №9:
Я думаю, смысл Linq в том, что он заменяет ваш DAL.
Эквивалентом вашего старого DAL является весь автоматически сгенерированный код, содержащийся в файлах DBML все, что вы не можете добавить в Linq.