58 votes

Quelle est la différence entre un modèle de vue et un objet de transfert de données?

Je fonde cette question sur Fowler PoEAA. Étant donné votre familiarité avec ce texte, les ViewModels utilisés dans ASP.NET MVC ne sont-ils pas les mêmes que les DTO? Pourquoi ou pourquoi pas? Je vous remercie.

98voto

Iain Galloway Points 6588

Ils servent un but similaire (encapsulation des données pour une autre couche de l'application), mais ils le font de manière différente et pour des raisons différentes.

  • Le but d'un DTO est de réduire le nombre d'appels entre les niveaux d'une application, en particulier lorsque ces appels sont coûteux (par exemple, systèmes distribués). Les dto sont presque toujours trivialement serializable, et en général ne contiennent pas de comportement.

    Par exemple, vous êtes l'élaboration d'un site de e-Commerce. NewCustomer et NewOrder sont des activités distinctes, mais que pour des raisons de performances à agréger leurs données en NewCustomerAndOrderDto , de sorte que votre client a seulement besoin de faire un aller-retour vers le serveur lors de l'exécution de ces deux opérations en même temps.

  • Le terme "ViewModel" signifie des choses légèrement différentes dans différentes saveurs de MV*, mais dont le but est principalement la séparation des préoccupations. Votre Modèle est souvent optimisé pour un but autre que la présentation, et il est de la responsabilité du ViewModel de dissocier votre point de Vue à partir du Modèle de mise en œuvre de détails. En outre, la plupart des MV* modèles conseillons de faire votre point de Vue en tant que "bête" que possible, et donc le ViewModel parfois assume la responsabilité de la logique de présentation.

    Par exemple, dans la même application e-Commerce, votre CustomerModel est le mal "forme" pour la présentation de votre "Nouveau Client" point de Vue. Pour commencer, votre point de Vue a deux champs de formulaire pour votre utilisateur à entrer et confirmer leur mot de passe, et votre CustomerModel ne contient pas un champ de mot de passe à tous! Votre NewCustomerViewModel contiendra les champs et pourrait (selon votre goût de MV*) être responsable de la base de validation.

19voto

Bavo Points 231

Le but est différent:

  • Les DTO sont utilisés pour transférer des données
  • Les ViewModels sont utilisés pour afficher des données à un utilisateur final.

Donc, normalement, les ViewModels contiennent les données de présentation, ce qui dans de nombreux cas est similaire à ce qui est dans un DTO, mais avec quelques différences. Pensez à la représentation des énumérations, de la localisation, de la devise, des formats de date, .... En effet, normalement, il ne devrait pas y avoir de logique à votre avis.

18voto

Igor Zevaka Points 32586

Les DTO dans MVVM et MVP sont généralement des objets très stupides et ne sont essentiellement qu'un groupe de setters et de getters de propriété. Les ViewModels d'autre part peuvent avoir un certain comportement.

Un effet secondaire positif pratique d'avoir des DTO est de faciliter la sérialisation. Si vous avez un objet plutôt complexe, disons C #, vous devrez souvent désactiver de manière sélective les choses que vous ne voulez pas sérialiser. Cela peut devenir plutôt moche et les DTO simplifient ce processus.

2voto

Brother Bill Points 1

Un modèle de vue et un objet de transfert de données présentent des similitudes et des différences.

Similaire: transférer les données d'un enregistrement (instance d'objet, peut-être sérialisé) vers un récepteur, qu'il s'agisse d'une vue ou d'un service

Différence: un modèle de vue est destiné à être envoyé à une vue, où il sera affiché, avec mise en forme. Un modèle de vue renvoie également des données à un contrôleur. Un DTO n'est généralement pas destiné à être présenté. Il est destiné à envoyer des données brutes.

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