Как создать сервис и уровни хранилища для MVC3 - PullRequest
6 голосов
/ 16 сентября 2011

Я недавно завершил проект MVC3 для клиента, используя шаблон репозитория, реализованный с использованием микро-ORM, и со служебным уровнем для моей бизнес-логики. ИМХО приложение работает хорошо, а клиент доволен.

Но мне приходилось писать много стандартного кода всякий раз, когда я хотел добавить / реализовать новый сервис и связанные с ним DTO. Плюс было значительное количество дублирования кода, преобразовывающего DTO в View Models и обратно, с ассоциированным PEBKAC. По мере развития требований в схему базы данных были внесены изменения, которые необходимо было распространить на модели представления.

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

Теперь я смотрю на другой проект MVC3 и хочу избежать написания всего шаблона самостоятельно, но я также хочу избежать генерации полного кода типа .netTiers. Я не использовал EF. Я склонен считать, что это слишком большой инструмент для такого масштаба проектов, который я предпринимаю, но если он может отнять у меня некоторые ручные шаги, это сэкономит много времени. Каковы достоинства EF, и будет ли он поддерживать сервисные уровни для меня?

Другой вариант, который я рассматриваю, это LightSpeed ​​, который потребовал бы от меня потратить несколько долларов (не много), но если бы он мог генерировать для меня код уровня обслуживания, это было бы хорошо потраченными деньгами. LightSpeed ​​поддерживает этот тип генерации кода?

Очевидно, что по мере развития модели предметной области и схемы базы данных службы должны быть обновлены с учетом этих изменений. .netTiers реализует это путем генерации частичных классов. Как эти другие инструменты обрабатывают эти изменения, не перезаписывая какую-либо пользовательскую логику на уровне сервиса?

Какие есть еще варианты?

Обновление: спасибо за все отзывы, множество положительных вариантов для просмотра. Кто-нибудь смотрел на Леса MVC ?

Обновление № 2: я собираюсь использовать опцию MVCScaffolding, которая сначала создает код для EF Code. Из коробки он создает класс Repository, а затем, к сожалению, придерживается его с помощью модели, которая в MVC фактически является моделью представления, а не моделью предметной области. В проекте MVCScaffolding есть запрос на извлечение для скаффолдинга сервисного уровня, поэтому мы рассмотрим этот вариант. Плюс AutoMapper для отображения POCO <-> DTO.

Ответы [ 2 ]

5 голосов
/ 17 сентября 2011

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

Процесс, который мы используем только для кода EF:

  1. Сборка edmx из нашей базы данных
  2. Установить шаблоны генерации классов T4 POCO
  3. Генерация наших классов POCO и контекста
  4. Удалите наши шаблоны edmx и T4, сохранив POCO и контекстные классы

Новые инструменты в Entity Framework хороши тем, что предоставляют различные варианты:

Первая модель:

  1. Модель в edmx
  2. Создать базу данных из edmx
  3. Создание классов POCO из edmx
  4. (необязательно) Удалить edmx, запустить только код

Код первый:

  1. Запись классов POCO
  2. Создание базы данных из классов POCO
  3. (Необязательно) Генерация edmx из классов POCO

База данных сначала:

  1. Создание базы данных
  2. Создать EDMX из базы данных
  3. Генерация классов POCO из edmx
  4. (необязательно) Удалить edmx, запустить только код

Приложение (14.01.2012):

Выпущена бета-версия Code First Migrations. Мы еще не исследовали это, но это выглядит интересно.

0 голосов
/ 29 сентября 2011

Я использую автомпер для сущностей -> dto translation

...