Je dois l’admettre. Le mémo a passé et je ne l’ai jamais lu. C’est au sujet d’Automapper.
L’avez-vous lu, vous?
Toutes ces années à écrire du code sans savoir que je pouvais automatiser la tâche la plus ennuyeuse de toutes! Celle d’instancier un objet à partir des données d’une autre source de données!
À quoi ressemble l’utilisation d’Automapper? À ceci…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//configuration, se réalise habituellement au démarrage de votre application | |
Mapper.CreateMap<Model, ViewModel>(); | |
//création d'un objet "Model" pouvant provenir d'une base de données | |
var model = new Model | |
{ | |
PageTitle = "Titre de page" | |
}; | |
//Mappage du Model en ViewModel | |
var viewModel = Mapper.Map<Model, ViewModel>(model); | |
//retourne "Model | |
Console.WriteLine(viewModel.PageTitle); |
C’est assez simple, n’est-ce pas? Comme l’expression le dit, le meilleur code est celui que vous n’avez pas à écrire!
L’idée est que vous pouvez configurer l’association des propriétés d’un objet source vers un objet destination. Mon cas d’exemple est assez simplet, j’en conviens. Il y a qu’une seule propriété qui est associée (PageTitle). Toutefois, vous remarquerez qu’Automapper a détecté la présence de cette propriété dans ces deux classes et a associé leur contenu automatiquement.
Le comportement d’Automapper est d’associer le contenu par convention. La règle est que, si le nom correspond exactement ou est identifié selon certaines règles, leur contenu sera associé. Aussi simple que ça.
La plus belle qualité d’Automapper est les possibilités de configuration des fonctionnalités de mappage. Sans trop se casser la tête, par exemple, il est possible d’aplatir un objet, faire de la projection de données ou même des mappages conditionnels sur des données d’un objet source. Et beaucoup plus encore!
Cela fait maintenant quelques semaines que je l’utilise dans mes développements et j’aime beaucoup le code d’instanciation d’objets que je n’ai plus à écrire. Dans mon cas, j’ai été en mesure de simplifier par beaucoup l’apparence de certains de mes contrôleurs MVC juste en éliminant l’instanciation de modèles de vue.
L’essayer c’est l’adopter, je vous le dis!
Je sais pas si t’eu la chance d’essayer ValueInjecter qui est moin verbatif que l’autre :
Ton exemple donne :
var s = new Source { Id = 3, Name = « Bill » };
var t = new Target();
//Si le deux classe ont la même propriétés.
t.InjectFrom(s);
J’y donnerai un essai certainement!