2010-09-02 14 views
2

DTO (Objets de transfert de données) sont des objets utilisés pour transférer des informations entre plusieurs sous-systèmes d'une application, souvent séparés par un réseau ou une limite de processus. C'est ma compréhension. Cependant, du point de vue Java, les sous-systèmes/modules doivent-ils se trouver sur des instances JVM différentes pour que les objets qu'ils utilisent entre eux soient qualifiés de DTO? (Je crois qu'une démarcation significative dans l'architecture en termes de modularité et de fonctionnalité entre les sous-systèmes serait suffisante.) Que dire?Quand un objet se qualifie-t-il comme un DTO?

De plus, en considérant les objets échangés par plusieurs modules dans la même couche/niveau SAME d'une architecture, ces objets ne sont-ils pas qualifiés de DTO? Une séparation par paliers est-elle obligatoire?

Merci d'avance.

Cordialement,

Nagendra U M

Répondre

3

Parce que le transfert d'objets entre les niveaux nécessite une sorte de sérialisation, il est considéré comme un DTO. Le transfert d'objets entre les couches se fait généralement par l'utilisation d'entités de domaine ne nécessitant donc pas de sérialisation. Par conséquent, vos DTO n'ont généralement pas de propriétés de comportement pour stocker des données.

Une petite note: Les objets DTO sont souvent confondus avec des objets anémiques lorsque vous avez des entités sans comportement, uniquement des données. Ou objets poltergeist lorsque les objets sont uniquement utilisés pour transporter des données dans et hors des méthodes ou des classes, puis disparaissent. Par exemple, votre mécanisme de persistance des données nécessite parfois que vous implémentiez ou héritiez des interfaces ou des classes que vous ne voulez pas coupler dans votre couche de domaine. Vous créez donc des objets héritant ou implémentant l'interface/classe et transférant des données à ceux-ci. classes pour la persistance.

class Person{ 
public string Name {get;set;} 
public int Age {get;set;} 

public void Validate(){} 
public void DoSomething(){} 
} 



public class PersonDTO : TableServiceContext 
{ 
public const string ContactTableName = "PersonTable" 

public string Name {get;set;} 
public int Age {get;set;} 

} 

Et vous auriez généralement une classe pour assembler et désassembler ces objets.

+0

Merci pour la réponse. Fin. Je suis d'accord que les DTO ont principalement seulement des données, et peu ou pas de comportement. Mais, la sérialisation est-elle obligatoire pour qu'un DTO soit appelé en tant que DTO? Tant que nous sommes capables de démarquer distinctement entre sous-systèmes et d'établir un contrat pour échanger des données entre eux via des objets non sérialisables (en supposant que les sous-systèmes partagent la même JVM), ne pouvons-nous pas appeler les objets comme DTO? (au moins en principe) ?? La deuxième question concernant les objets se déplaçant à travers et au sein des niveaux architecturaux est toujours sans réponse. Observe, Nagendra U M –

+0

Fowler indique que les DTO servent à réduire les appels à distance et à sérialiser toutes les données à la fois http://martinfowler.com/eaaCatalog/dataTransferObject.html. Bien qu'aujourd'hui je pense que nous l'utilisons pour plus que cela, comme mon exemple qui ne vise pas à réduire les appels coûteux mais à ne pas coupler mes modèles de domaine à mon mécanisme de persistance des données afin de faire un transport distant. En ce qui concerne la question de l'architecture, je ne crois pas qu'il s'agisse de DTO car ces objets ne sont pas soumis au transport à distance, ce qui est le but d'un DTO. – Wix