Использовать сгенерированные LINQ классы напрямую? - PullRequest
3 голосов
/ 01 декабря 2009

LINQ сгенерирует набор классов из файлов SQL. Должны ли они использоваться напрямую или они должны быть заключены в другой класс, чтобы модель не зависела от реализации?

Ответы [ 3 ]

2 голосов
/ 01 декабря 2009

Вы можете сделать это любым способом. Обычно я заключаю классы Linq в SQL в хранилище, но если приложение маленькое, вы можете напрямую использовать методы хранилища.

Если приложение больше, вы можете добавить бизнес-уровень.

1 голос
/ 01 декабря 2009

Я думаю, что можно использовать сгенерированные классы моделей непосредственно на бизнес-уровне и уровне представления, однако я бы определенно инкапсулировал доступ к данным для этих объектов в шаблон хранилища некоторого описания (GetOne(), Save(), Search(), Delete() и т. Д.).

Основная причина для этого состоит в том, чтобы «отключить» результаты запроса перед возвратом их на вызывающий уровень, чтобы клиенты случайно не выполняли запросы непосредственно к базе данных, когда они используют LINQ для возвращаемых результатов. Например, вызов ToList() для IQueryable<T> вернет локальную копию последовательности, которой можно управлять с помощью простого LINQ to Objects.

Это также способствует лучшему разделению слоев и меньшей связности, так как клиенты будут взаимодействовать через интерфейсные методы в хранилище, а не использовать LINQ to SQL напрямую для доступа к данным, поэтому, если вы решите перебросить LINQ to SQL в пользу Entity Framework (вздрагивает), рефакторинг сделать проще.

Единственное исключение, которое я хотел бы сделать, - это когда объекты LINQ to SQL должны пересекать границу службы, т. Е. Отправляться как объекты передачи данных в службу WCF или из нее. В этом случае, я думаю, было бы неплохо иметь отдельную, легковесную объектную модель, которая поддерживает сериализацию - не посылайте ваши объекты LINQ to SQL напрямую по проводам.

1 голос
/ 01 декабря 2009

Если вам действительно нужно абстрагироваться от модели базы данных sql, то Linq-To-Sql, вероятно, является неправильным выбором. Конечно, вы можете заставить это работать (но это не то, для чего это было сделано).

Если вам нужен этот уровень абстракции, вам нужно перейти к более «корпоративному» ORM, например Entity Framework . Они требуют большей конфигурации, которая используется для указания более сложных сопоставлений, которые позволяют вашей объектной модели и модели базы данных не похожи друг на друга,

С другой стороны, если это излишне, используйте Ling to Sql. Это просто и легко, если вы можете придерживаться упрощенного подхода к отображению.

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