Différence entre DTO, VO, POJO, JavaBeans?

ont vu quelques questions similaires:

  • Quelle est la différence entre un Javabéen et un POJO?
  • Quelle est la différence entre POJO (simple Old Java Object) et DTO (Data Transfer Object)?

pouvez-vous aussi me dire dans quels contextes ils sont utilisés? Ou dans le but de eux?

451
demandé sur Community 2009-10-23 13:30:36

6 réponses

JavaBeans

un Javabéen est une classe qui suit les conventions de JavaBeans telles que définies par Sun. Wikipedia a un assez bon résumé de ce que JavaBeans sont:

JavaBeans sont des composants logiciels réutilisables pour Java qui peuvent être manipulés visuellement dans un outil de constructeur. En pratique, il s'agit de cours écrits dans le langage de programmation Java et conformes à un Convention. Ils sont utilisés pour encapsuler plusieurs objets en un seul objet (la fève), de sorte qu'ils peuvent être passés comme une seule fève objet plutôt que de multiples objets individuels. Un JavaBean est un objet Java qui est sérialisable, a un constructeur nul et permet l'accès aux propriétés en utilisant les méthodes getter et setter.

pour fonctionner comme une classe JavaBean, une classe d'objet doit obéir à certaines conventions concernant la méthode de nommage, la construction et le comportement. Ces conventions permettent d'avoir des outils qui peuvent utiliser, réutiliser, remplacer et connecter les JavaBeans.

les conventions requises sont:

  • la classe doit avoir un constructeur par défaut public. Cela permet une instanciation facile dans les cadres d'édition et d'activation.
  • les propriétés de classe doivent être accessibles en utilisant get, set, et d'autres méthodes( dites méthodes accessor et méthodes mutator), suivant Convention d'appellation standard. Cela permet une inspection automatisée facile et la mise à jour de l'état de haricot dans les cadres, dont beaucoup comprennent des éditeurs personnalisés pour divers types de propriétés.
  • La classe doit être sérialisable. Cela permet aux applications et aux cadres de sauvegarder, stocker et restaurer de manière fiable l'état de la fève d'une manière indépendante de la VM et de la plate-forme.

parce que ces exigences sont largement exprimées comme suit: conventions plutôt que d'implémenter des interfaces, certains développeurs voient les JavaBeans comme de simples vieux objets Java qui suivent des conventions de nommage spécifiques.

POJO

un vieil objet Java simple ou POJO est un terme initialement introduit pour désigner un objet Java léger simple, n'implémentant aucune interface javax.ejb , par opposition à heavyweight EJB 2.x (en particulier les haricots D'entité, les haricots de Session apatrides ne sont pas que mauvais IMO). Aujourd'hui, l' terme est utilisé pour tout objet simple sans substance supplémentaire. Encore une fois, Wikipedia fait un bon travail à définir POJO :

POJO est un acronyme de Java Objet. Le nom est utilisé pour souligner que l'objet en question est un objet Java ordinaire, pas un objet spécial objet, et en particulier pas un Entreprise JavaBean (surtout avant EJB 3). Le terme a été inventé par Martin Fowler, Rebecca Parsons et Josh MacKenzie in Septembre 2000:

" nous nous sommes demandés pourquoi les gens étaient si opposés à l'utilisation d'objets réguliers dans leur les systèmes et a conclu qu'il était parce que les objets simples manquait de fantaisie nom. Nous lui avons donc donné un, et c'est pris sur très bien."

le terme reprend le schéma de termes plus anciens pour les technologies qui ne pas utiliser de nouvelles caractéristiques de fantaisie, telles que POTS (Plain Old Service téléphonique) en la téléphonie, et POD (Plain Old Données Structures) qui sont définies en C++ mais n'utilisez que les caractéristiques du langage C, et POD (Plain Old Documentation) in Perl.

le terme a très probablement gagné acceptation générale en raison de la besoin d'un commun et facilement entendu terme qui contraste avec compliqué objet cadres. Un JavaBean est un POJO qui est serialisable, a un no-argument constructeur, et permet l'accès à propriété utilisation de getter et setter méthode. Une entreprise JavaBean n'est pas une seule classe mais un composant entier modèle (encore une fois, EJB 3 réduit la complexité de L'entreprise JavaBeans).

comme les dessins utilisant des POJOs sont devenus plus couramment utilisés, les systèmes ont surgi qui donnent POJOs certains des fonctionnalité utilisée dans les cadres et plus de choix sur les zones de la fonctionnalité est en fait nécessaire. L'hibernation et le printemps en sont des exemples.

Objet De Valeur

un objet de valeur ou VO est un objet tel que java.lang.Integer qui contient des valeurs (donc des objets de valeur). Pour une définition plus formelle, je me réfère souvent à la description de Martin Fowler de valeur objet :

dans Patterns of Enterprise Application Architecture, j'ai décrit L'objet Value comme un petit objet tel qu'un objet Money ou date range. Leur propriété est de suivre la valeur sémantique plutôt que de faire référence à la sémantique.

vous pouvez habituellement leur dire parce que leur notion d'égalité n'est pas basée sur l'identité, au lieu de deux objets de valeur sont égaux si tous leurs champs sont égaux. Bien que tous les champs soient égaux, vous n'avez pas besoin de comparer tous les champs si un sous - ensemble est unique-par exemple, les codes de devise pour les objets de devise sont suffisants pour tester l'égalité.

Une heuristique générale est que les objets de valeur doivent être entièrement immuable. Si vous voulez pour changer un objet value, vous devez remplacer l'objet par un nouvel objet et ne pas être autorisé à mettre à jour les valeurs de l'objet value lui - même-les objets value pouvant être mis à jour conduisent à des problèmes d'alias.

la littérature J2EE utilise le terme objet de valeur pour décrire une notion différente, ce que j'appelle un objet de transfert de données . Ils ont depuis changé leur usage et utilisent le terme objet de transfert à la place.

vous pouvez trouver plus de bon matériel sur les objets de valeur sur le wiki et par Dirk Riehle .

Objet De Transfert De Données

Data Transfer Object ou DTO est un modèle (anti) introduit avec EJB. Au lieu d'effectuer de nombreux appels à distance sur EJBs, l'idée était d'encapsuler des données dans un objet de valeur qui pourrait être transféré sur le réseau: un objet de transfert de données. Wikipedia a un définition décente de objet de transfert de données :

Data transfer object (DTO), anciennement connu sous le nom de value objects ou VO, est un modèle utilisé pour transférer des données entre sous-systèmes d'application logicielle. Les DTO sont souvent utilisés en conjonction avec des objets d'accès aux données pour extraire des données d'une base de données.

la différence entre les objets de transfert de données et les objets professionnels ou les objets d'accès aux données est qu'une n'a aucun comportement sauf pour le stockage et la récupération de ses propres données (accesseurs et mutateurs).

dans une architecture EJB traditionnelle, les DTO ont un double but: premièrement, ils contournent le problème que les fèves entity ne sont pas sérialisables; deuxièmement, ils définissent implicitement une phase d'assemblage où toutes les données utilisées par la vue sont récupérées et rassemblées dans les DTO avant de retourner le contrôle au niveau de présentation.


ainsi, pour beaucoup de gens, les DTO et VOs sont la même chose (mais Fowler utilise VOs pour signifier autre chose que ce que nous avons vu). La plupart du temps, ils suivent les conventions JavaBeans et sont donc JavaBeans aussi. Et tous sont des POJOs.

722
répondu Pascal Thivent 2014-05-22 09:33:03

DTO vs VO

DTO - les objets de transfert de données ne sont que des conteneurs de données qui sont utilisés pour transporter des données entre couches et niveaux.

  • contient principalement des attributs. Vous pouvez même utiliser les attributs sans getters et setters.
  • les objets de transfert de données ne contiennent aucune logique commerciale.

analogie:

formulaire D'enregistrement Simple avec attributs nom d'utilisateur, mot de passe et l'adresse e-mail.

  • lorsque ce formulaire est soumis dans le fichier RegistrationServlet, vous obtiendrez tous les attributs de la couche view à la couche business où vous passez les attributs de Java beans et ensuite à la couche DAO ou la persistance.
  • DTO's aide à transporter les attributs de la couche de vue à la couche affaires et enfin la couche persistance.

DTO a été principalement utilisé pour obtenir des données transportées à travers le réseau efficacement, il peut être même de JVM à une autre JVM.

Dto sont souvent java.io.Serializable - afin de transférer des données à travers JVM.

VO - un objet de valeur [1][2] représente lui-même un ensemble fixe de données et est similaire à un enum Java. Un Objet de Valeur de l'identité est basé sur leur état plutôt que sur leur identité d'objet et est immuable. Un exemple du monde réel serait la couleur.ROUGE, la Couleur.BLEU, SEXE.FEMME etc.

POJO vs JavaBeans

[1] La beauté Java d'un POJO est que ses attributs privés sont tous accessibles via des getters publics et des setters qui se conforment aux conventions JavaBeans. par exemple

    private String foo;
    public String getFoo(){...}
    public void setFoo(String foo){...}; 

[2] JavaBeans doit mettre en œuvre sérialisable et ont un constructeur sans argument, alors qu'en POJO N'a pas ces restrictions.

49
répondu Srinivas M.V. 2018-07-26 19:32:46

en gros,

DTO: "objets de transfert de Données" peuvent se rendre dans des calques séparés dans l'architecture logicielle.

VO: "objets de Valeur" tenir un objet Entier,de l'Argent etc.

POJO: simple vieil objet Java qui n'est pas un objet spécial.

Java Beans: nécessite un Java Class pour être sérialisable, avoir un no-arg constructeur et un getter et setter pour chaque champ

36
répondu Olcay Tarazan 2013-07-15 10:06:59

Java Beans ne sont pas la même chose que les Ejb.

la spécification JavaBeans dans Java 1.0 était la tentative de Sun de permettre aux objets Java d'être manipulés dans un IDE qui ressemblait à de la VB. Il y avait des règles établies pour les objets qui se qualifiaient comme "Java Beans":

  1. constructeur par Défaut
  2. Getters et setters pour les données privées des membres qui ont suivi la convention d'appellation des fichiers
  3. Serialisable
  4. Peut-être d'autres que j'oublie.

EJBs est venu plus tard. Ils combinent des composants distribués et un modèle transactionnel, fonctionnant dans un conteneur qui gère les threads, la mise en commun, le cycle de vie, et fournit des services. Ils sont loin de Java Beans.

DTOs est apparu dans le contexte Java parce que les gens ont découvert que la spécification EJB 1.0 était trop" bavarde " avec la base de données. Plutôt que de faire un aller-retour pour chaque élément de données, les gens les emballaient dans des grains de Java en vrac et les expédiaient.

POJOs étaient une réaction contre les EJBs.

22
répondu duffymo 2015-02-26 12:58:36

POJO : C'est un fichier java(class) qui n'étend ni n'implémente aucun autre fichier java(class).

Haricot : Il s'agit d'un fichier java(class) dans lequel toutes les variables sont privées, les méthodes sont publiques et les getters et setters appropriés sont utilisés pour accéder aux variables.

classe normale : Il s'agit d'un fichier java(class) qui peut être public / privé/par défaut / protégé variables et qui peuvent ou non étendre ou implémenter un autre fichier java(class).

3
répondu Suraj Kalokhe 2016-08-17 05:31:53

Tout D'Abord Parler De

classe normale - cela signifie que n'importe quelle classe définit qui est un normalement en java il est signifie que vous créez le type différent de propriétés de méthode etc.

Haricot Bean n'en est rien, c'est seulement un objet de cette classe à l'aide de ce bean, vous pouvez accéder à votre classe java même comme objet. .

et après cela, parler de la dernière POJO

POJO - POJO est cette classe qui n'ont aucun service, elle a seulement un constructeur par défaut et une propriété privée et ces propriétés pour définir une valeur correspondant setter et getter méthodes. C'est une forme courte D'objet Java.

1
répondu ASHISH KUMAR SINGH 2017-12-15 09:25:44