Question

Quelle est la meilleure façon de mettre en œuvre DTO?

Si je comprends bien, ils sont un moyen de transférer des données entre les objets. Par exemple, dans une application ASP.Net, vous pouvez utiliser un DTO pour envoyer des données à partir du code-behind à la composante de la couche logique métier.

Qu'en est-il d'autres options, comme le fait d'envoyer les données en tant que paramètres de la méthode? (Serait-ce plus facile asces wher il y a moins de données à envoyer?)

Qu'en est-il une classe statique qui ne détient que des données, qui peut être référencé par d'autres objets (une sorte de classe de stockage global de données asembly)? (Est-ce que cette encapsulation de rupture trop?)

Qu'en est-il un seul DTO générique utilisé pour chaque transfert? Il peut être un peu plus de mal à utiliser, mais réduit le nombre de classes nécessaires pour travailler avec (réduit l'encombrement de l'objet).

Merci de partager vos pensées.

Était-ce utile?

La solution 6

Merci pour toutes les idées utiles ...

Un résumé + mon opinion à ce sujet:

- S'il y a une petite quantité de données à déplacer et pas trop d'endroits pour le déplacer, les paramètres réguliers peuvent suffire

-. S'il y a beaucoup de données et / ou de nombreux objets pour le déplacer vers un objet spécialement créé peut être plus facile (objet DTO)

- Un objet de données globales qui peuvent être référencées (plutôt que passer) par divers objets semble être mal vu ... mais je me demande s'il n'y a pas parfois une place pour elle dans un sous-système particulier ? Il est un moyen de réduire la quantité de données transitant. Il ne pousse les limites de la « bonne encapsulation », mais dans certains cas dans des couches spécifiques, peut-être il pourrait ajouter à une simplicité assemply particluar des classes. Ainsi, on pourrait perdre l'encapsulation niveau de la classe, mais pourrait encore avoir encapsulation niveau d'assemblage.

Autres conseils

Je l'ai utilisé DTO à:

  • Les données passent entre l'interface utilisateur et le service de niveau de l'application d'une norme 3 niveaux.
  • données passer comme paramètres de la méthode pour encapsuler un grand nombre (5+) de paramètres.

Le « un DTO pour les gouverner tous » approche pourrait être gênant, le mieux est d'aller avec DTO spécifiques pour chaque groupe caractéristique / fonction, en prenant soin de les nommer afin qu'ils soient faciles à assortir entre les fonctions qu'ils sont utilisé dans.

Je ne l'ai jamais vu DTO statique dans la façon dont vous parlez et hésiteriez à créer singletons DTO comme vous décrivez.

Je garde simple et carte d'une classe DTO à une table db. Ils sont légers pour que je puisse les envoyer partout, y compris sur le fil.

Je souhaite qu'il pourrait être aussi simple. Bien que DTO origine en raison de niveaux du réseau de distribution d'un système, il peut y avoir charge de questions si les objets de domaine sont renvoyés pour afficher les calques. Voici quelques-unes d'entre elles:

1.By exposer les objets de domaine pour afficher la couche, Vues prennent conscience de la structure des objets de domaine, ce qui permet de visualiser fait quelques hypothèses sur la façon dont les objets connexes sont disponibles. Par exemple, si un objet de domaine « Personne » a été retunrned à vue auquel il est « lié » et un autre point de vue, « Adresse » de la personne doit être lié, il y aurait une tendance à la couche d'application à utiliser une sémantique comme person.getAddresse () qui woukd ne fonctionne pas car à ce moment-là adresse objet de domaine peut-être pas été chargé au point. En substance, avec des objets de domaine devient disponible pour afficher les calques, vues peuvent toujours faire des hypothèses sur la façon dont les données sont disponibles.

2.) Lorsque des objets de domaine sont liés à des vues (plus dans les clients épais), il y aura alwyas une tendance

pour la vue logique centrée au fluage à l'intérieur de ces objets qui les rend logiquement corrompus.

Au fond de mon expérience, je l'ai vu que faire domaine des objets à la disposition des vues créer des problèmes d'architecture, mais il y a des problèmes avec l'utilisation de également de DTO depuis l'utilisation de DTO crée du travail supplémentaire en termes de création d'assembleurs (DTO aux objets de domaine et inverse) , la prolifération des objets analogues comme objet de domaine patient, DTO patient et peut-être le haricot patient lié à voir.

Il est clair qu'il n'y a pas de bonnes réponses pour ce spécialement dans un système client épais.

J'ai emprunté ce court et pas complète mais vraie réponse à cliché DTO de:
http://www.theserverside.com/discussions/thread.tss? thread_id = 32389 # 160505

Je pense qu'il est assez courant d'utiliser DataSet / DataTable comme « un DTO pour les gouverner tous ». Il est facile de les charger à partir de la base de données, et les valeurs persistent en arrière, et ils peuvent être facilement sérialisé.

Je dirais qu'ils sont certainement plus de mal à utiliser. Ils offrent tous la plomberie, mais la programmation contre eux est une douleur (beaucoup de casting, chèques nuls, les chaînes magiques, etc.). Il serait intéressant de voir un bon ensemble de méthodes d'extension pour faire travailler avec eux un peu plus « naturelle ».

DTO sont utilisés pour envoyer des données sur le fil, et non pas entre les objets. Consultez ce post: POCO vs DTO

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