2010-11-03 27 views
2

Dans mon esprit, cela semble être une super idée. Utiliser EnvDTE rendrait cela possible aussi, alors pourquoi n'y a-t-il pas plus d'exemples sur ce disponible?Utiliser des templates T4 pour générer des ViewModels

Peut-être que je manque un inconvénient de faire cela ...?

Tout pointeur vers de bonnes ressources T4 et EnvDTE serait génial. :)

+0

Les générer à partir de quoi? – SLaks

+0

SLaks: De mes modèles ... Donc au lieu de changer d'abord le modèle et ensuite de changer le viewmodel, je pourrais compter sur la génération de code pour générer les parties ennuyeuses de mon viewmodel (par exemple les propriétés exposées) – rozon

Répondre

3

Vous ne le voyez probablement pas beaucoup parce que c'est en fait assez difficile à mettre en œuvre correctement. J'utilise T4 pour générer des classes de modèles à partir de DTO WCF pour une utilisation dans une variante de WinForms MVP depuis un moment, et cela a pris du temps pour que cela fonctionne correctement.

L'utilisation d'une classe en tant que source "de données" pour un modèle est assez difficile en soi. Vous aurez besoin de choisir entre l'utilisation de la réflexion (ou d'une API similaire) pour lire IL ou CodeDom compilé pour lire le code source. Si vous choisissez de travailler avec des assemblys compilés, vous devrez faire face à des problèmes tels que le verrouillage de fichiers et le chargement d'assemblages référencés. Si vous choisissez de travailler avec du code source, vous devrez gérer un code potentiellement incompilable. Une fois que vous avez pris cette décision, la copie des propriétés sera la chose la plus triviale que vous aurez à faire. Vous devrez également décider quelles interfaces et quels attributs (le cas échéant) de la classe source doivent être réimplémentés/copiés dans la classe générée. Selon la façon dont vous mettez en œuvre des choses comme la validation, cela peut soulever toutes sortes de petits problèmes difficiles. Il y a aussi beaucoup de décisions amusantes à faire autour de la gestion des hiérarchies d'héritage et des références à d'autres classes de modèles.

Tout ce qui précède est adressable, mais une approche unique serait difficile à mettre en œuvre. Pour revenir à la partie «exemple» de votre question, il y a aussi la possibilité de faire autant de travail sans être payé. J'aimerais pouvoir partager le T4 que j'ai créé pour la génération de modèles, mais il appartient à mon employeur, et j'ai mieux à faire avec mon temps libre que de ré-implémenter l'approche pour poster sur le web ...