Я недавно завершил проект 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.