Уровень доступа к данным ASP.NET MVC2 - PullRequest
2 голосов
/ 01 мая 2010

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

Я смотрел на Linq-to-sql, и он хочет использовать свои собственные модели, которые он создает, и поэтому он ОЧЕНЬ тесно связан. Хотя мне нравится, как вы используете linq-to-sql в коде, мне действительно не нравится, как он хочет создавать свои собственные доменные объекты.

Какие альтернативы мне следует рассмотреть? Я пытался использовать NHibernate, но мне не понравилось то, как я должен был использовать для запроса и получения различных объектов. Я искренне люблю синтаксис и то, как вы используете linq, я просто не хочу, чтобы он был так тесно связан с объектами домена.

Ответы [ 4 ]

3 голосов
/ 01 мая 2010

Если вы не хотите, чтобы ваш домен был тесно связан с вашей базой данных, то ваш выбор довольно большой:

  1. NHibernate
  2. Entity Framework

Linq 2 Sql, как вы обнаружили, генерирует код из уровня базы данных, так что об этом не может быть и речи. То же самое касается Subsonic и LLBLGen Pro (я верю, поправьте меня, если я ошибаюсь). Entity Framework раньше тоже попадал в эту лодку, но версия 4 поставлялась с поддержкой «сначала кода», так что это определенно вариант.

И NHibernate, и Entity Framework поддерживают запросы LINQ, хотя поддержка LINQ Entity Framework предположительно превосходит поддержку NHibernate. Я согласен, что запросы HQL и Criteria не так элегантны, как LINQ, но я чувствую, что поддержка LINQ в NHibernate будет значительно улучшена в версии 3.0.

0 голосов
/ 01 мая 2010

Я знаю, что вам не очень нравится NHibernate, но если вы хотите еще раз взглянуть на него, посмотрите http://sharparchitecture.net/. Они действительно отлично справляются с разметкой шаблона проекта, правильно разделяя проблемы.

0 голосов
/ 01 мая 2010

Вы можете использовать LINQ to SQL для создания типов, которые представляют объекты данных. Это в значительной степени просто классы, которые представляют таблицы в вашей БД. В проекте MVC вы должны использовать их для предоставления данных бизнес-уровню, с которого вы можете начать определять бизнес-объекты, а затем (и, на мой взгляд, очень важно) определить вашу модель презентации.

0 голосов
/ 01 мая 2010

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

Шаблон хранилища MVC + - все еще зависит от модели данных?

...