LinqToSql Best Practices - PullRequest
       10

LinqToSql Best Practices

7 голосов
/ 28 октября 2008

Я только начал создавать свой слой доступа к данным, используя LinqToSql. Все говорят о классном синтаксисе, и мне очень нравится Linq в целом.

Но когда я увидел, как генерируются ваши классы, если вы перетаскиваете некоторые таблицы в LinqContext, я был поражен: столько кода, которое никому не понадобится?!

Итак, я посмотрел, как другие люди использовали LinqToSql, например, Роб Коннери в своей демонстрации StoreFront.

Поскольку мне не нравится, как генерируется весь этот код, я создал слой своего домена вручную и использовал сгенерированные классы в качестве ссылки. С этим решением у меня все в порядке, поскольку я могу использовать функции, предоставляемые Linq (отложенное выполнение, отложенная загрузка, ...), и мой уровень домена довольно прост для понимания.

Как вы используете LinqToSql?

Ответы [ 5 ]

6 голосов
/ 28 октября 2008

Созданные классы не так тяжелы, как кажется. Конечно, он занимает довольно много строк кода, но в целом он настолько легок, насколько это возможно для функций, которые он предоставляет.

Я тоже использовал для создания своих собственных таблиц, но теперь вместо этого я просто использую LINQtoSQL DataContext. Зачем? Создание проще, функции лучше, функциональная совместимость работает, возможно, даже быстрее, чем мои собственные (не во всех аспектах. Обычно мои собственные вещи были чрезвычайно быстрыми в одном, но общие вещи были быстрее во всем остальном).
Но самая важная часть: легче привлечь новых разработчиков в LINQ, чем в мою собственную. Есть учебники, примеры кодов, документация, все, что я должен был бы создать для своего кода сам. То же самое с использованием моих вещей с другими технологиями, такими как WCF или привязка данных. Есть много подводных камней, о которых нужно позаботиться.

Я научился не превращать себя в сложный путь, он выглядит быстрым и легким с самого начала, гораздо веселее, чем учиться пользоваться библиотеками, но это настоящая боль в a через несколько месяцев по дороге, обычно даже для себя.

Через некоторое время новость создания моих собственных контейнеров данных перестала действовать, и я заметил боль, связанную с добавлением функции. Функция, которую я имел бы бесплатно, если бы использовал предоставленные классы.
Затем я должен был объяснить свой код другому программисту. Если бы я использовал предоставленные классы, я мог бы направить его на какой-нибудь веб-сайт, чтобы узнать о них. Но для моих занятий мне пришлось тренировать его сам, что заняло много времени и затруднило привлечение новых людей в проект.

4 голосов
/ 28 октября 2008

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

Затем, если вы используете шаблон хранилища для переноса доступа к запросам Linq, чтобы они возвращали реализации интерфейса ваших объектов (базовых объектов Linq), LinqToSql становится довольно гибким.

1 голос
/ 28 октября 2008

Вы можете писать свои собственные классы вручную и использовать атрибуты LINQ to SQL для объявления сопоставлений или внешний XML-файл.

Если вы хотите остаться с существующим дизайнером и просто изменить процесс генерации кода, выберите мои шаблоны, которые позволяют адаптировать сгенерированный код .

0 голосов
/ 28 октября 2008

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

0 голосов
/ 28 октября 2008

Используйте скомпилированные запросы. В противном случае Linq to SQL - медленная собака. Действительно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...