La duplication des classes est-elle toujours utile / bonne conception?
Il est recommandé de disposer d'une classe de modèle de vue distincte pour une utilisation dans la couche d'interface utilisateur plutôt que d'utiliser la même classe que celle utilisée dans la couche de données. Votre interface utilisateur / page Web peut avoir besoin d'afficher d'autres informations qui ne sont pas strictement liées à l'entité de données. En créant cette classe supplémentaire, vous vous donnez la liberté de modifier facilement votre interface utilisateur à mesure que les exigences changent avec le temps.
En ce qui concerne l'utilisation d'AutoMapper, je l'évite personnellement pour 3 raisons:
Les échecs silencieux plus fréquents
Étant donné qu'AutoMapper mappe automatiquement entre les propriétés, la modification du nom d'une propriété sur une classe et non sur l'autre entraînera l'omission du mappage de la propriété. Le compilateur ne le saura pas. Automapper ne s'en soucie pas.
Absence d'analyse statique
Donc, vous avez une grande base de code à traiter. Il y a un million de classes avec un million de propriétés. On dirait qu'ils ne sont pas utilisés ou sont des doublons. Cet outil "Rechercher toutes les références" dans Visual Studio vous aidera à voir où les propriétés sont utilisées et à créer une carte dans votre tête indiquant comment toute l'application se bloque. Mais attendez, il n'y a aucune référence explicite à la moitié des propriétés, car Automapper est utilisé. Mon travail est maintenant beaucoup plus dur.
Besoins tardifs qui augmentent la complexité
Automapper est tout à fait dandy lorsque tout ce que vous voulez faire est de copier les valeurs d'une classe à une autre (comme c'est souvent le cas au début du développement), mais vous souvenez-vous de ces exigences qui changent avec le temps? Que faire si vous avez maintenant besoin d'obtenir des valeurs d'autres parties de votre application, par exemple spécifiques à l'utilisateur connecté ou à un autre état contextuel?
La façon dont AutoMapper crée les mappages de classe un-à-un au démarrage de l'application ne se prête pas bien à ce type de changements spécifiques au contexte. Oui, il y a probablement moyen de le faire fonctionner, mais je trouve généralement plus propre, plus simple et plus expressif d'écrire la logique moi-même.
En résumé, avant d’atteindre Automapper pour économiser 30 secondes de mappage manuel d’une classe à une autre, réfléchissez-y.
La programmation est l'art de dire à un autre humain ce que l'on veut que l'ordinateur fasse. - Donald Knuth
Dans cet esprit, demandez-vous "AutoMapper est-il utile aujourd'hui et sera-t-il demain?"