2008-11-08 12 views
8

J'essaie de comprendre comment tout cela fonctionne ensemble. Je sais qu'un DTO est fondamentalement juste un conteneur de données pour les objets de domaine à passer en arrière et en avant aux formes et autres. Est-ce que l'objet Domaine contient un DTO ou est-ce que le DTO et l'objet de domaine ont juste les mêmes propriétés qui seront mappées manuellement?Objets de transfert de données, objets de domaine et référentiels

Si j'expose mon type DTO dans un service, comment utiliser les getters et les setters sans créer un aller-retour pour chaque opération get/set sur le client? Je sais que vous pouvez avoir un long constructeur, mais cela peut devenir moche si vous avez plus de 7 propriétés.

Lors de l'implémentation du modèle de référentiel, dois-je passer dans le DTO ou l'objet de domaine?

Répondre

4
  • Les objets DTO et Domain doivent être séparés.
  • Il doit y avoir un mappeur qui mappe un DTO à un objet de domaine et un objet de domaine à un DTO. Ce mappeur doit être une implémentation d'une interface, le mappeur par défaut utilisant la réflexion pour mapper les objets les uns aux autres.
  • Le référentiel doit être un service qui renvoie les objets de domaine, qui eux-mêmes doivent être gérés.
  • Si le DTO est une classe exposée par un service Web, le WSDL créé définit la propriété en tant qu'élément et le proxy créé de l'autre côté crée simplement une propriété getter/setter qui est exécutée le client lui-même, de sorte que les getters et les setters ne provoquent pas un aller-retour.
  • Même si vous créez simplement une variable publique dans votre DTO, le proxy sera implémenté en tant que getter et setter.
1

Je pense qu'il est préférable que le DTO contienne une référence à l'objet Domain afin que les utilisateurs du DTO puissent commencer à utiliser l'objet Domain. Cela dit, si les consommateurs du DTO ne doivent pas muter l'objet Domaine, vous devrez peut-être que le DTO contienne les valeurs encapsulées dans l'objet Domaine. Cela peut être difficile car vous devrez peut-être effectuer une copie complète de l'objet Domaine. Je ne suis pas sûr de savoir pourquoi le fait d'exposer un type DTO en tant que service entraînerait l'utilisation de ses getters/setters pour faire un aller-retour. Si le service est un service distant, le DTO renvoyé est sérialisé de toute façon et vos getters/setters obtiendront la copie des valeurs. Si le service n'est pas à distance, il ne semble pas être très pénalisant de faire un «aller-retour» puisque le client et le service sont dans le même espace de traitement.