132 votes

DTO = ViewModel?

Je suis l'aide de NHibernate pour enregistrer mes objets du domaine. Pour garder les choses simples, je suis en utilisant un ASP.NET projet MVC comme mes deux couche de présentation, et ma couche de service.

Je veux retourner mon domaine d'objets en XML à partir de mes classes de contrôleur. Après la lecture de quelques posts ici sur StackOverflow je rassemble les Dto sont la voie à suivre. Cependant, j'ai également venir à travers des postes de parler du ViewModel.

Ma question: Sont des Objets de Transfert de Données et Viewmodel la même chose? Ou est un ViewModel un genre de sous le motif d'un DTO?

136voto

Daniel Auger Points 8459

La définition canonique d'un DTO les données de forme d'un objet sans aucun problème.

Viewmodel sont le modèle de la vue. Viewmodel sont généralement totale ou partielle des données à partir d'un ou plusieurs objets (ou des Otd) ainsi que tous les membres supplémentaires spécifiques à la vue du comportement (méthodes qui peuvent être exécutées par la vue, les propriétés pour indiquer comment basculer de la vue des éléments, etc...). Vous pouvez regarder le viewmodel toutes les données pour une vue plus des comportements. Viewmodel peut ou ne peut pas mapper un à un pour les objets d'entreprise ou de l'Otd.

Par la voie, NHibernate projections venir dans maniable si un certain viewmodel a besoin d'un sous-ensemble de données à partir d'un objet persistant.

80voto

Ray Points 1523

ViewModel dans ASP.NET MVC pratique est la même que la DTO, cependant ViewModel dans le pattern MVVM est différente de DTO parce que ViewModel dans MVVM a des comportements mais DTO n'a pas.

28voto

stiank81 Points 10207

DTO != ViewModel

Dans le MVVM modèle le ViewModel est utilisée pour isoler le Modèle de la Vue. Pour représenter le Modèle que vous pourriez utiliser simple DTO classes, ce qui est mappé à une base de données, par exemple par NHibernate. Mais je n'ai jamais vu une classe ViewModel qui est modélisé comme un DTO.. ViewModel la plupart des classes ont un comportement, qui Otd n'ont pas.

24voto

David Points 1715

DTO - Objets de Transfert de Données sont exactement comme il le dit, conteneurs pour le transfert de données. Ils n'ont pas de comportement, mais simplement un tas de setters et getters. Certaines personnes font leur immuable et il suffit de créer de nouveaux cas de besoin, plutôt que la mise à jour de celles existantes. Ils doivent être sérialisables pour permettre le transfert à travers le réseau.

Généralement les Dto sont utilisés pour l'envoi de données à partir d'une couche à l'autre de la couche à travers le processus de limites que les appels à un service distant peut être coûteux, de sorte que toutes les données requises est poussé dans un DTO et transférés au client en un seul morceau (gros grains).

Cependant, certaines personnes utilisent la notion d'écran lié Otd (rien à voir avec le processus de passage de boundries). Encore une fois ce sont renseignés avec les données requises (généralement les données requises pour un écran particulier, et pourrait être une agrégation de données provenant de diverses sources) et envoyé au client.

http://blog.jpboodhoo.com/CommentView,guid,21fe23e7-e42c-48d8-8871-86e65bcc9a50.aspx

Dans les cas simples comme cela a déjà été dit ce DTO peut être utilisé pour la liaison à la vue, mais dans les cas plus complexes, il exigerait la création d'un ViewModel et le déchargement des données à partir de DTO à ViewModel qui n'est évidemment plus de travail (lors de l'application en utilisant le pattern MVVM).

Donc encore une fois comme déjà indiqué DTO!=ViewModel

et

DTO et ViewModel ont différents buts dans la vie

17voto

riadh gomri Points 301

Tout d'abord, la différence majeure est que ViewModel peut avoir un comportement ou des méthodes qui DTO Doivent Pas !!!

Deuxièmement, à l'Aide de DTO comme un ViewModel dans ASP.NET MVC faire votre demande étroitement couplée à la DTO et c'est exactement la oppostie objectif de l'aide de DTO. Si vous le faites, quelle est la diffrence à l'aide de votre Modèle de domaine ou DTO, plus de complexité pour obtenir un anti-modèle ?

Aussi ViewModel dans ASP.NET pouvez utiliser DataAnnotations pour validation.

La même DTO peut avoir différentes Viewmodel de la Cartographie, et Un ViewModel peut être composé de différents DTO (toujours avec l'objet de mappage pas la composition) . parce que je pense que c'est encore pire si vous avez un ViewModel qui contient un DTO, nous aurons le même problème.

À partir de la couche de présentation, pensez à DTO comme un contrat, vous recevrez un objet que vous avez à considérer comme étranger à votre demande et n'ont pas de contrôle sur celui-ci (même si vous avez des ex du service, la dto et des couches de présentation sont les vôtres).

Enfin, si vous n'cette séparation, les développeurs peuvent travailler de concert avec la facilité. La personne qui conçoivent des ViewModels, les Vues et les Contrôleurs n'avez pas à vous soucier de la couche de service ou de la DTO de mise en œuvre, parce qu'il va faire de la cartographie les autres développeurs de terminer leur mise en œuvre... Il peut même utiliser les Moqueries outil manuel ou moqueur pour remplir la couche de présentation avec les données de test.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X