DTO est l'objet que vous pouvez utiliser à la limites du système. Lorsque vous avez un web service SOAP par exemple et que vous voulez retourner la réponse que vous utiliseriez DTO. Il est plus facile à traiter que XML qui doit être retourné sur le fil. Les dto sont souvent générés par des outils, basés sur WSDL par exemple. DTO sont souvent adaptés aux besoins des consommateurs et peut être affecté par des exigences de performance.
Des objets de valeur sur l'autre main, vivre dans la de base du système. Il capture les pièces de la logique métier et peut-être les règles de mise en forme. Il rend votre code plus type de coffre-fort et expressif. Il aborde également des "Primitifs obsession" anti-modèle. Un bon exemple est l'utilisation de la classe "SocialSecurityNumber" au lieu de string. Ou de l'Argent au lieu de la virgule. Ces objets doivent être immuables, de sorte qu'ils ressemblent plus à des primitives et peuvent être facilement partagés entre les différents threads.
Par exemple dans l'hypothétique 'commande client' système:
CustomerAndLastFiveOrders est DTO (optimisée pour éviter les multiples appels de réseau)
Comparant DTO objets avec des objets de valeur, c'est comme comparer des oranges et des pommes.
Ils servent des situations complètement différentes. DTO définit l'objet ou à la structure de classe de la façon dont les données seront transférées entre les couches tout des objets de valeur définit la logique de l'égalité lorsque les valeurs sont comparées.
Permettez-moi de vous expliquer avec des exemples, essayons d'abord de comprendre la valeur d'objets :-
Valeur de l'objet est un objet dont l'égalité est fondée sur la valeur plutôt
de l'identité.
Considérer le code ci-dessous, nous avons créé deux objets d'argent, est une roupie pièces de monnaie et les autres est d'une roupie de la monnaie de papier.
Maintenant, quand vous comparez au-dessus des objets de la comparaison ci-dessous doit avoir la valeur true parce que 1 roupie note est égale à 1 roupie pièce de monnaie dans le monde réel.
Donc, soit vous utilisez “==” opérateur ou vous êtes à l'aide de la “Équivaut à” sa méthode, la comparaison doit avoir la valeur true. Par défaut “==” ou “égal à égal” n'évaluera pas vrai, alors vous devez utiliser l'opérateur de remplacement et la redéfinition de méthode pour obtenir le comportement souhaité. Vous pouvez voir ce lien qui explique comment atteindre le même.
if(OneRupeeCoin==OneRupeeNote){Console.WriteLine("They should be equal");}if(OneRupeeCoin.Equals(OneRupeeNote)){Console.WriteLine("They should be equal ");}
Normalement des objets de valeur sont de bons candidats pour l'immutabilité; vous pouvez en lire plus à ce sujet de ici. Vous pouvez voir cette vidéo qui décrit comment des objets immuables peuvent être créés.
Maintenant, nous allons essayer de comprendre DTO:-
DTO (objets de Transfert de Données) est un conteneur de données pour simplifier le déplacement
le transfert de données entre les couches.
Ils sont également appelés comme des objets de transfert. DTO est seulement utilisé pour transmettre des données et ne contiennent pas de logique métier. Ils n'ont qu'simple setters et getters.
Par exemple, considérons ci-dessous l'appel que nous faisons deux appels à obtenir les données du client et de l'autre pour obtenir des données de produit.
DataAccessLayer dal =newDataAccessLayer();//Call 1:- get Customer dataCustomerBO cust = dal.getCustomer(1001);//Call 2:- get Products for the customerProductsBO prod = dal.getProduct(100);
Donc on peut combiner les Clients et les Produits de la classe dans une catégorie comme indiqué ci-dessous.
Maintenant, avec un seul appel, nous serons en mesure d'obtenir à la fois des clients et des données de produit. Objets de transfert de données sont utilisés dans les deux scénarios, l'un pour améliorer appels à distance et la deuxième pour aplatir la hiérarchie de l'objet; vous pouvez lire ce l'article qui explique plus sur les objets de transfert de données.
//Only one callCustomerProductDTO cust = dal.getCustomer(1001);
Il y a plusieurs bonnes réponses ici, mais je vais en ajouter un à la capture d'une différence fondamentale:
Des objets de valeur n'ont pas une identité. C'est, toute comparaison entre deux occurrences d'un objet de valeur qui contiennent doivent indiquer qu'ils sont égaux. Objets de Transfert de données, tandis que seulement utilisé pour stocker des valeurs, une identité. La comparaison de deux instances d'un DTO qui ont les mêmes valeurs, mais ont été créés de façon indépendante, ne sera pas indiquer qu'ils sont égaux.
Exemple:
DTO dto1 =new DTO(10);
DTO dto2 =new DTO(10);
dto1.equals(dto2);//False (if equals is not overridden)
dto1 == dto2;//False
VO vo1 = VO.getInstance(10);
VO vo2 = VO.getInstance(10);
vo1.equals(vo2);//True
vo1 == vo2;//True
C'est légèrement difficile à mettre en œuvre le modèle d'Objet de Valeur en Java, depuis l'opérateur == compare toujours l'identité de l'objet. Une façon de le faire serait de mettre en place un cache d'objets qui renvoie le même objet pour chaque valeur.
publicclass VO {Map<Integer,WeakReference<VO>> cache =newLinkedHashMap<Integer,WeakReference<VO>>();publicstatic VO getInstance(int value){
VO cached = cache.get(value);if(cached ==null){
cached =new VO(value);
cache.put(value,newWeakReference<VO>(cached));}return cached.get();}privateint value;private VO(int value){this.value = value;}}
"toute comparaison entre deux occurrences d'un objet de valeur qui contiennent doit indiquer que..." - "qui contiennent"? Contiennent quoi?
Un objet de valeur est quelque chose qui est utile pour encapsuler comme un objet, mais il n'a pas d'identité. La comparer à une entité, qui est quelque chose que n'ont d'identité. Ainsi, dans un système de traitement de commandes d'un Client ou d'une Commande ou d'un Compte sont des concepts qui renvoient à des personnes spécifiques ou des choses ou des événements, de sorte qu'ils sont des entités, où un objet de valeur est quelque chose comme une valeur monétaire, qui n'a pas une existence indépendante de son propre. Par exemple, pour un système où une partie de la demande implique le calcul de la façon de diviser un paiement entre les différents comptes, j'ai créé un immuable de l'Argent de l'objet qui a eu une fracture de la méthode qui a retourné une matrice d'Argent des objets uniformément fractionnement de l'objet original du montant à travers eux, de cette façon, le code pour la répartition des montants était dans un endroit qui est très pratique lorsque la personne qui écrit la jsp pourrait l'utiliser, et qu'ils n'ont pas à gâcher le jsp avec la non-présentation du code.
Un Objet de Transfert de Données est un wrapper pour le groupement des choses ensemble pour l'envoi de l'échelle des niveaux d'application ou des couches. L'idée est que vous voulez réduire la quantité de réseau va-et-vient de la circulation par la conception de méthodes que d'envoyer de grandes gerbes de l'information.
Je conseille à l'encontre de l'objet de transfert de données. C'est un EJB 1.0 anti-modèle, à mon avis, la valeur donnée par ceux qui insistent dans la couche de pureté.
Un objet de valeur est utile. C'est généralement un objet immuable, comme de l'Argent. Ils devraient être thread-safe.
Pourquoi ont-ils être thread-safe, lorsqu'ils sont immuables? Immuable EST thread-safe. Désolé. J'ai pensé que vous avez dit que nous avons à faire thread-safe. Parfois, un DTO fonctionne comme un réseau (un sérialisation) optimisation parce que votre entreprise objet peut être assez lourd, mais vous avez seulement besoin de transférer une petite fraction de ses informations.
DTO est une classe représentant des données avec aucune logique. DTO sont généralement utilisés pour le transfert de données entre les différentes applications ou de différentes couches dans une seule application. Vous pouvez regarder dumb sacs d'informations dont le seul but est d'obtenir cette information à un destinataire.
D'autre part, Objet de Valeur est un membre à part entière de votre modèle de domaine. Il respecte les mêmes règles comme une Entité. La seule différence entre la Valeur de l'Objet et de l'Entité est que la Valeur de l'Objet ne possède pas sa propre identité. Cela signifie que deux des Objets de Valeur avec la même propriété doivent être considérés de la même manière alors que les deux Entités diffèrent même si leurs propriétés match.
Des Objets de valeur ne contenir la logique et, généralement, ils ne sont pas utilisés pour le transfert de données entre l'application des limites. Lire plus ici
Objet de Transfert de données est utilisé pour définir les valeurs de propriété qui est à venir à partir de la base de données dans la Couche d'Accès aux Données (DAO), tandis que l'utilisation de VO pattern, on peut définir des valeurs dans la couche contrôleur de la MVC qui sont déjà définies dans la Couche DAO. Client peut avoir accès à VO objets plutôt que de les DTO qui il/elle peut effectuer une itération dans la page jsp.
Vous pouvez dire qu'il y a une séparation de préoccupation pour les deux couches.
DTO est l'objet que vous pouvez utiliser à la limites du système. Lorsque vous avez un web service SOAP par exemple et que vous voulez retourner la réponse que vous utiliseriez DTO. Il est plus facile à traiter que XML qui doit être retourné sur le fil. Les dto sont souvent générés par des outils, basés sur WSDL par exemple. DTO sont souvent adaptés aux besoins des consommateurs et peut être affecté par des exigences de performance.
Des objets de valeur sur l'autre main, vivre dans la de base du système. Il capture les pièces de la logique métier et peut-être les règles de mise en forme. Il rend votre code plus type de coffre-fort et expressif. Il aborde également des "Primitifs obsession" anti-modèle. Un bon exemple est l'utilisation de la classe "SocialSecurityNumber" au lieu de string. Ou de l'Argent au lieu de la virgule. Ces objets doivent être immuables, de sorte qu'ils ressemblent plus à des primitives et peuvent être facilement partagés entre les différents threads.
Par exemple dans l'hypothétique 'commande client' système:
CustomerAndLastFiveOrders est DTO (optimisée pour éviter les multiples appels de réseau)
Client est une Entité
De l'argent et SKU sont des objets de Valeur de
OriginalL'auteur Dmitry
Comparant DTO objets avec des objets de valeur, c'est comme comparer des oranges et des pommes.
Ils servent des situations complètement différentes. DTO définit l'objet ou à la structure de classe de la façon dont les données seront transférées entre les couches tout des objets de valeur définit la logique de l'égalité lorsque les valeurs sont comparées.
Permettez-moi de vous expliquer avec des exemples, essayons d'abord de comprendre la valeur d'objets :-
Considérer le code ci-dessous, nous avons créé deux objets d'argent, est une roupie pièces de monnaie et les autres est d'une roupie de la monnaie de papier.
Maintenant, quand vous comparez au-dessus des objets de la comparaison ci-dessous doit avoir la valeur true parce que 1 roupie note est égale à 1 roupie pièce de monnaie dans le monde réel.
Donc, soit vous utilisez “==” opérateur ou vous êtes à l'aide de la “Équivaut à” sa méthode, la comparaison doit avoir la valeur true. Par défaut “==” ou “égal à égal” n'évaluera pas vrai, alors vous devez utiliser l'opérateur de remplacement et la redéfinition de méthode pour obtenir le comportement souhaité. Vous pouvez voir ce lien qui explique comment atteindre le même.
Normalement des objets de valeur sont de bons candidats pour l'immutabilité; vous pouvez en lire plus à ce sujet de ici. Vous pouvez voir cette vidéo qui décrit comment des objets immuables peuvent être créés.
Maintenant, nous allons essayer de comprendre DTO:-
Ils sont également appelés comme des objets de transfert. DTO est seulement utilisé pour transmettre des données et ne contiennent pas de logique métier. Ils n'ont qu'simple setters et getters.
Par exemple, considérons ci-dessous l'appel que nous faisons deux appels à obtenir les données du client et de l'autre pour obtenir des données de produit.
Donc on peut combiner les Clients et les Produits de la classe dans une catégorie comme indiqué ci-dessous.
Maintenant, avec un seul appel, nous serons en mesure d'obtenir à la fois des clients et des données de produit. Objets de transfert de données sont utilisés dans les deux scénarios, l'un pour améliorer appels à distance et la deuxième pour aplatir la hiérarchie de l'objet; vous pouvez lire ce l'article qui explique plus sur les objets de transfert de données.
Ci-dessous une comparaison de la feuille.
OriginalL'auteur Shivprasad Koirala
Il y a plusieurs bonnes réponses ici, mais je vais en ajouter un à la capture d'une différence fondamentale:
Des objets de valeur n'ont pas une identité. C'est, toute comparaison entre deux occurrences d'un objet de valeur qui contiennent doivent indiquer qu'ils sont égaux. Objets de Transfert de données, tandis que seulement utilisé pour stocker des valeurs, une identité. La comparaison de deux instances d'un DTO qui ont les mêmes valeurs, mais ont été créés de façon indépendante, ne sera pas indiquer qu'ils sont égaux.
Exemple:
C'est légèrement difficile à mettre en œuvre le modèle d'Objet de Valeur en Java, depuis l'opérateur == compare toujours l'identité de l'objet. Une façon de le faire serait de mettre en place un cache d'objets qui renvoie le même objet pour chaque valeur.
OriginalL'auteur Ryan Gross
Un objet de valeur est quelque chose qui est utile pour encapsuler comme un objet, mais il n'a pas d'identité. La comparer à une entité, qui est quelque chose que n'ont d'identité. Ainsi, dans un système de traitement de commandes d'un Client ou d'une Commande ou d'un Compte sont des concepts qui renvoient à des personnes spécifiques ou des choses ou des événements, de sorte qu'ils sont des entités, où un objet de valeur est quelque chose comme une valeur monétaire, qui n'a pas une existence indépendante de son propre. Par exemple, pour un système où une partie de la demande implique le calcul de la façon de diviser un paiement entre les différents comptes, j'ai créé un immuable de l'Argent de l'objet qui a eu une fracture de la méthode qui a retourné une matrice d'Argent des objets uniformément fractionnement de l'objet original du montant à travers eux, de cette façon, le code pour la répartition des montants était dans un endroit qui est très pratique lorsque la personne qui écrit la jsp pourrait l'utiliser, et qu'ils n'ont pas à gâcher le jsp avec la non-présentation du code.
Un Objet de Transfert de Données est un wrapper pour le groupement des choses ensemble pour l'envoi de l'échelle des niveaux d'application ou des couches. L'idée est que vous voulez réduire la quantité de réseau va-et-vient de la circulation par la conception de méthodes que d'envoyer de grandes gerbes de l'information.
OriginalL'auteur Nathan Hughes台湾不在中国
Je conseille à l'encontre de l'objet de transfert de données. C'est un EJB 1.0 anti-modèle, à mon avis, la valeur donnée par ceux qui insistent dans la couche de pureté.
Un objet de valeur est utile. C'est généralement un objet immuable, comme de l'Argent. Ils devraient être thread-safe.
Immuable EST thread-safe.
Désolé. J'ai pensé que vous avez dit que nous avons à faire thread-safe.
Parfois, un DTO fonctionne comme un réseau (un sérialisation) optimisation parce que votre entreprise objet peut être assez lourd, mais vous avez seulement besoin de transférer une petite fraction de ses informations.
OriginalL'auteur duffymo
DTO est une classe représentant des données avec aucune logique. DTO sont généralement utilisés pour le transfert de données entre les différentes applications ou de différentes couches dans une seule application. Vous pouvez regarder dumb sacs d'informations dont le seul but est d'obtenir cette information à un destinataire.
D'autre part, Objet de Valeur est un membre à part entière de votre modèle de domaine. Il respecte les mêmes règles comme une Entité. La seule différence entre la Valeur de l'Objet et de l'Entité est que la Valeur de l'Objet ne possède pas sa propre identité. Cela signifie que deux des Objets de Valeur avec la même propriété doivent être considérés de la même manière alors que les deux Entités diffèrent même si leurs propriétés match.
Des Objets de valeur ne contenir la logique et, généralement, ils ne sont pas utilisés pour le transfert de données entre l'application des limites. Lire plus ici
OriginalL'auteur Alireza Rahmani Khalili
Objet de Transfert de données est utilisé pour définir les valeurs de propriété qui est à venir à partir de la base de données dans la Couche d'Accès aux Données (DAO), tandis que l'utilisation de VO pattern, on peut définir des valeurs dans la couche contrôleur de la MVC qui sont déjà définies dans la Couche DAO. Client peut avoir accès à VO objets plutôt que de les DTO qui il/elle peut effectuer une itération dans la page jsp.
Vous pouvez dire qu'il y a une séparation de préoccupation pour les deux couches.
OriginalL'auteur Geekjava90