2010-11-03 3 views
2

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

Возможно, мне не хватает недостатка в этом ...?

Любой указатель на хорошие ресурсы T4 и EnvDT будет отличным. :)

+0

Сгенерировать их из чего? – SLaks

+0

SLaks: Из моих моделей ... Поэтому вместо того, чтобы сначала менять модель, а затем менять модель обзора, я мог бы полагаться на генерацию кода для генерации скучных частей моей модели просмотра (например, открытых свойств) – rozon

ответ

3

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

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

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

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

0

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

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

+0

Пожалуйста, добавьте соответствующую часть вашего поста в ваш ответ. Ссылка подлежит гниению. – nhahtdh

Смежные вопросы