Question

Lorsque vous utilisez MVC et convertissez vos données en ViewModels, quel est le moyen accepté de le faire?

Pour le moment, j'utilise AutoMapper et cela fonctionne bien. Cependant, j’ai vu dans un article de blog (je pense que c’était Rob C) avoir un constructeur sur le ViewModel qui prend le nombre de paramètres requis puis génère le ViewModel

Par exemple, var RetViewModel = new ViewModel (MyObject);

Cela semble être une façon décente de le faire, pensées?

Était-ce utile?

La solution

La "manière acceptée" " est généralement le moyen qui vous convient le mieux.

Je n’ai jamais entendu parler d’AutoMapper et j’y ai découvert qu’il créait un mappage d’objets magiques en suivant une certaine convention.

Screencast à: http://www.dnrtv.com/default.aspx? showNum = 155

Remarque: je n'ai regardé que la moitié environ de cette capture d'écran. Mes pensées sur AutoMapper sont donc quelque peu incomplètes.

Personnellement, je ne souhaite pas l'utiliser, car cela nécessite l'écriture de code supplémentaire pour mapper / "aplatir". entre les propriétés de l'objet (code, IMO, mieux à gauche dans la logique du constructeur). Dans l'exemple screencast, ce code est généralement placé dans les méthodes d'action d'un contrôleur, ce qui peut entraîner des ballonnements (j'aime les contrôleurs / actions minces)

J'utilise la méthode que vous avez donnée dans votre message, le constructeur du modèle prenant un objet et effectuant tout le travail.

De plus, je crée toujours un constructeur vide qui ne prend aucun paramètre afin de pouvoir définir manuellement les valeurs de propriété de l'objet ViewModel.

Exemple:

CustomViewModel myModle = new CustomViewModle
{
    Property1 = "Something",
    Property2 = 3,
    //etc..
};

Pour résumer, essayez les deux solutions et voyez ce qui vous convient. AutoMapper est une excellente idée et je peux le voir aider dans de nombreuses situations. Cependant, à certains moments, lorsque vous l’utilisez, vous écrivez autant de code que si vous utilisiez des constructeurs d’objets.

Autres conseils

Eh bien, le " officiellement recommandé " L’approche consiste à laisser le mécanisme de liaison modèle gérer cela pour vous. C'est plus simple et automatise le processus. Le modèle devra exposer ses propriétés pour être en lecture-écriture pour que le classeur puisse l'initialiser.

La deuxième option dont vous parlez tirera probablement parti de la création d'objets immuables dans vos modèles. En d'autres termes, toutes les propriétés sont en lecture seule et vous ne les initialisez qu'une fois via les paramètres du constructeur. Cela nécessitera que vous consultiez directement FormCollection pour extraire les valeurs soumises. C'est plus de travail mais a ses propres avantages, comme le fait d'être un type de programmation défensive.

Je ne peux pas dire quel chemin est meilleur, les deux sont des options. Personnellement, je préfère le second style pour le moment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top