Использование шаблонов T4 для генерации ViewModels - PullRequest
2 голосов
/ 03 ноября 2010

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

Может быть, я упускаю недостаток в этом ...?

Любой указатель на хорошие ресурсы T4 и EnvDTE был бы великолепен. :)

Ответы [ 2 ]

3 голосов
/ 03 ноября 2010

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

Использование класса в качестве «данных»"источник шаблона довольно сложен сам по себе.Вам нужно будет выбрать между использованием отражения (или аналогичного API) для чтения скомпилированного IL или CodeDom для чтения исходного кода.Если вы решите работать со скомпилированными сборками, вам придется столкнуться с такими проблемами, как блокировка файлов и загрузка сборок, на которые есть ссылки.Если вы решите работать с исходным кодом, вам придется иметь дело с потенциально некомпилируемым кодом.

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

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

0 голосов
/ 01 марта 2013

Использование класса в качестве источника данных для шаблона довольно сложно

Это неправильно.Посмотрите на asp mvc 3 леса.http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/

...