.NET и слои базы данных - PullRequest
       11

.NET и слои базы данных

10 голосов
/ 06 марта 2009

Когда я в последний раз работал в программировании, мы пытались отойти от DataReaders и традиционного API ADO.NET к объектно-реляционному сопоставлению (ORM).

Для этого мы сгенерировали DataContext нашей БД через sqlmetal. Тогда был тонкий слой данных, который сделал DataContext private, и любой код, необходимый для доступа к базе данных, должен был бы использовать метод public в этом тонком слое данных. Эти методы были в основном хранимыми процедурами; они будут выполнять запросы к базе данных через LINQ to SQL.

Это общий подход сегодня? Я имею в виду, все, кто использует платформу .NET 3.5, действительно запускают sqlmetal в процессе сборки или как? В то время это казалось почти взломом.

По сути, я хотел бы знать, стоит ли ожидать LINQ to SQL и sqlmetal, если я собираюсь написать DAL сегодня в магазине .NET 3.5, в котором нет сторонних разработчиков с открытым исходным кодом. ОРМ.

Ответы [ 6 ]

5 голосов
/ 06 марта 2009

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

Кроме того, это может быть не тот плакат, который вы имели в виду, но он похож (а также тот, что в моей кабине)

http://download.microsoft.com/download/4/a/3/4a3c7c55-84ab-4588-84a4-f96424a7d82d/NET35_Namespaces_Poster_LORES.pdf

3 голосов
/ 29 июня 2009

Лучший слой данных - это тот, который прост и прост и выполняет работу без каких-либо наворотов. Я использовал технологии, о которых вы упомянули, и написал о них здесь: Единственный шаблон для доступа к данным - нет шаблонов для доступа к данным

3 голосов
/ 06 марта 2009

Ваш подход хорош. В настоящее время я пользуюсь услугами Astroria ( ADO.NET Data Services ). В MSDN Magazine было хорошее введение по этому поводу.

Мне также нравится новый PLINQO (требуется CodeSmith Tools , хотя). Это очень гладко, на мой взгляд.

Когда у меня есть такой DAL (сервисный уровень), я просто использую этот сервис из моего клиентского приложения (Silverlight или ASP.NET MVC).

3 голосов
/ 06 марта 2009

Я думаю, это зависит от вашего использования, но я бы сказал, что с таким тонким слоем данных, как вы объяснили, это будет ваш DAL. В большинстве проектов поверх этого слоя создается еще один слой, в основном для логики редактирования / создания и, возможно, некоторой логики сшивания для получения.

Для большинства моих проектов я делаю это так.

Репозиторий содержит экземпляр DataContext и предоставляет некоторые основные методы добавления / удаления
ProductRepository: Репозиторий предоставляет общие запросы (IQueryable)
StoreService использует экземпляр различных репозиториев, таких как ProductRepository, SalesRepository и обрабатывает всю логику для создания чего-то похожего на продукт.

Так что-то вроде ...

StoreService.CreateProduct(/* properites */)

Это вернет какой-то класс результата.

1 голос
/ 06 марта 2009

Этот сайт использует LINQ to SQL, поэтому примите это как хотите.

Официально Microsoft поддерживает Entity Framework через LINQ to SQL с точки зрения новых разработок. Тем не менее, есть вокальная группа людей, которые думают, что EF - неправильный путь . LINQ to SQL все еще будет существовать некоторое время и является очень приличным ORM, хотя и несколько ограниченным с точки зрения того, какую базу данных вы можете использовать.

Я бы порекомендовал LINQ как отличную отправную точку для вашего ORM. Если вам нужно лучше, посмотрите на EF и / или NHibernate .

0 голосов
/ 07 марта 2009

«Является ли это сегодня общим подходом? Я имею в виду, каждый, кто использует платформу .NET 3.5, действительно запускает sqlmetal в процессе сборки или как?»

Люди, которых я знаю, использующие 3.5 Framework (и это почти все) - подавляющее большинство - все еще используют NHibernate. Версия 2.0 очень хорошая операционная система. Я начал использовать его в недавнем проекте, и он значительно сократил мой код доступа к данным, так что я действительно не хочу больше ничего использовать в будущем. А API-интерфейс Fluent NHibernate делает некоторые шаги для людей, которым не нравится отображение XML.

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