Lorsque l'on parcourt les couches, il est très fastidieux d'effectuer des affectations droite->gauche pour remplir les modèles. Par exemple :
employeeViewModel.FirstName = employeeModel.FirstName;
employeeViewModel.LastName = employeeModel.LastName;
...
Nous pouvons donc construire un ModelCopier qui utilise la réflexion pour copier les modèles :
var employeeViewModel = ModelCopier.Copy<EmployeeViewModel>(employeeModel);
Cette technique simplifie grandement la tâche. Cependant, il y a quelques éléments qui sont assez troublants à ce sujet :
- Nous avons effectivement perdu la possibilité de suivre l'utilisation des propriétés sur les objets source et destination. Par exemple, la recherche des utilisations (dans Resharper) de la propriété FirstName ne révèle pas les cas ModelCopier.
- Si nous modifions le nom d'une propriété dans la classe source ou la classe de destination, nous pouvons involontairement provoquer des exceptions d'exécution, car nous ne nous rendons peut-être pas compte que nous devons mettre à jour à la fois la classe source et la classe de destination.
D'un côté du spectre, nous pouvons utiliser la réflexion, ce qui est très facile, mais au détriment de la maintenabilité. À l'autre extrémité du spectre, il est très fastidieux mais très facile à maintenir.
Réflexion (facile et dangereuse) <-----> Affectation directe (fastidieuse et facile à maintenir)
Je suis curieux de savoir si quelqu'un a trouvé un compromis qui offre la facilité d'utilisation de la réflexion pour la copie avec la maintenabilité de l'affectation directe.
L'une des solutions que nous avons envisagées consiste à créer un plugin qui génère des méthodes d'extension gérant l'affectation des propriétés dans chaque cas. En d'autres termes, il s'agit de créer un outil qui s'occupera de la partie fastidieuse.
EDIT :
Veuillez comprendre que cette question ne porte pas sur l'outil de cartographie à utiliser. J'essaie de comprendre comment nous pouvons profiter des avantages de la cartographie basée sur la réflexion tout en profitant des avantages de la maintenabilité fournis par l'affectation directe (ou un contrat de cartographie des propriétés).