Question

J'ai vu des questions similaires:

Pouvez-vous également me dire dans quels contextes ils sont utilisés? Ou le but d'eux?

Était-ce utile?

La solution

JavaBeans

Un JavaBean est une classe qui suit les conventions JavaBeans tel que défini par Sun. Wikipedia a un assez bon résumé de ce que JavaBeans sont:

  

Les JavaBeans sont des composants logiciels réutilisables pour Java qui peuvent être manipulés visuellement dans un outil de création. En pratique, ce sont des classes écrites dans le langage de programmation Java conformément à une convention particulière. Ils sont utilisés pour encapsuler de nombreux objets dans un seul objet (le bean), de sorte qu'ils puissent être transmis comme un seul objet de bean au lieu de plusieurs objets individuels. Un JavaBean est un objet Java sérialisable, doté d'un constructeur nullary et permettant l'accès aux propriétés à l'aide de méthodes getter et setter.

     

Pour fonctionner en tant que classe JavaBean, une classe d'objet doit respecter certaines conventions relatives à la dénomination, la construction et le comportement des méthodes. Ces conventions permettent de disposer d’outils pouvant utiliser, réutiliser, remplacer et connecter des JavaBeans.

     

Les conventions requises sont les suivantes:

     
      
  • 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 la classe doivent être accessibles à l'aide de get, set et d'autres méthodes (appelées méthodes d'accès et méthodes de mutation), conformément à la convention de dénomination standard. Cela permet une inspection et une mise à jour automatisées et faciles de l’état des beans dans les frameworks, dont beaucoup incluent des éditeurs personnalisés pour différents types de propriétés.
  •   
  • La classe devrait être sérialisable. Cela permet aux applications et aux infrastructures de sauvegarder, de stocker et de restaurer de manière fiable l’état du bean de manière indépendante de la machine virtuelle et de la plateforme.
  •   
     

Etant donné que ces exigences sont largement exprimées sous forme de conventions plutôt que par la mise en oeuvre d'interfaces, certains développeurs considèrent JavaBeans comme de simples anciens objets Java qui respectent des conventions de dénomination spécifiques.

POJO

Un ancien objet Java ou POJO simple est un terme introduit à l'origine pour désigner un objet Java léger et simple, sans implémentation d'interface javax.ejb , par opposition à EJB 2.x (en particulier Entity Beans) , Les Beans Session sans état ne sont pas si mauvais, IMO). Aujourd'hui, le terme est utilisé pour tout objet simple, sans matériel supplémentaire. Encore une fois, Wikipedia fait un bon travail en définissant POJO :

  

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

     
    

"Nous nous demandions pourquoi les gens étaient si opposés à utiliser des objets ordinaires dans leur     systèmes et a conclu qu'il était     parce que les objets simples manquaient de fantaisie     prénom. Nous leur en avons donc donné un, et c'est     attrapé très bien. "

  
     

Le terme continue le schéma de   termes plus anciens pour les technologies qui font   n'utilisez pas de nouvelles fonctionnalités fantaisistes, telles que   POTS (Plain Old Telephone Service) à   téléphonie et PODS (Plain Old Data   Structures) définies en C ++   mais n'utilisez que les fonctionnalités du langage C, et   POD (Plain Old Documentation) en Perl.

     

Le terme a probablement gagné   acceptation généralisée en raison de la   besoin d'un commun et facilement   terme compris qui contraste avec   cadres d'objet compliqués. UNE   JavaBean est un POJO qui est   sérialisable, sans argument   constructeur, et permet d'accéder à   propriétés utilisant getter et setter   méthodes. Un Enterprise JavaBean n'est pas   une seule classe mais un composant entier   modèle (encore une fois, EJB 3 réduit la   complexité des Enterprise JavaBeans).

     

Les conceptions utilisant des POJO sont devenues   plus couramment utilisés, les systèmes ont   surgi qui donnent aux POJO une partie de la   fonctionnalité utilisée dans les frameworks et   plus de choix sur quels domaines de   les fonctionnalités sont réellement nécessaires.   Hibernate et Spring 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 Objet de valeur de Martin Fowler:

  

Dans Patterns of Enterprise Application Architecture, j'ai décrit Value Object comme un petit objet, tel qu'un objet Money ou une plage de dates. Leur propriété clé est qu'ils suivent la sémantique de valeur plutôt que la sémantique de référence.

     

Vous pouvez généralement leur dire que leur notion d'égalité n'est pas basée sur l'identité, mais que 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 suffisent pour tester l'égalité.

     

Une heuristique générale veut que les objets de valeur soient entièrement immuables. Si vous souhaitez modifier un objet de valeur, vous devez remplacer cet objet par un nouvel objet et ne pas être autorisé à mettre à jour les valeurs de l'objet de valeur lui-même - les objets de valeur pouvant être mis à jour entraînent des problèmes d'alias.

     

La littérature J2EE ancienne utilisait le terme objet de valeur pour décrire une notion différente, ce que j'appelle un objet de transfert de données . Depuis, ils ont modifié leur utilisation et utilisent à la place le terme Objet de transfert .

     

Vous pouvez trouver d'autres informations intéressantes sur les objets de valeur sur le wiki et par Dirk Riehle .

Objet de transfert de données

L'objet de transfert de données ou DTO est un modèle (anti) introduit avec EJB. Au lieu d'effectuer de nombreux appels à distance sur des EJB, il s'agissait d'encapsuler des données dans un objet de valeur pouvant être transféré sur le réseau: un objet de transfert de données. Wikipedia a une définition correcte de objet de transfert de données :

  

L'objet de transfert de données (DTO), anciennement appelé objets de valeur ou VO, est un modèle de conception utilisé pour transférer des données entre des sous-systèmes d'application logicielle. Les DTO sont souvent utilisés avec des objets d’accès aux données pour récupérer des données d’une base de données.

     

La différence entre les objets de transfert de données et les objets métier ou les objets d'accès aux données est qu'un DTO n'a aucun comportement, à l'exception du stockage et de la récupération de ses propres données (accesseurs et mutateurs).

     

Dans une architecture EJB traditionnelle, les DTO remplissent deux fonctions: premièrement, ils résolvent le problème que les beans entity ne sont pas sérialisables; deuxièmement, ils définissent implicitement une phase d’assemblage où toutes les données à utiliser par la vue sont extraites et classées dans les DTO avant de rendre le contrôle au niveau présentation.

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

Autres conseils

DTO vs VO

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

  • Il contient principalement des attributs. Vous pouvez même utiliser des attributs publics sans les accesseurs ni les setters.
  • Les objets de transfert de données ne contiennent aucune logique métier.
  

Analogie:
Formulaire d'inscription simple avec attributs nom d'utilisateur,   mot de passe et identifiant email.

     
      
  • Lorsque ce formulaire est soumis dans le fichier RegistrationServlet, vous obtenez tous les attributs de la couche d'affichage à la couche de gestion où vous passez.   les attributs aux haricots java, puis au DAO ou à la couche de persistance.
  •   
  • Le DTO aide à transporter les attributs du calque d'affichage vers le calque métier et enfin vers le calque de persistance.
  •   

Le DTO a principalement été utilisé pour transférer efficacement les données sur le réseau. Il peut même s'agir d'une machine virtuelle vers une autre machine virtuelle.

Les

DTO sont souvent java.io.Serializable - afin de transférer des données sur une machine virtuelle Java.

VO - Un objet de valeur [1] [2] représente lui-même un ensemble de données fixe et s'apparente à un enum Java. L'identité d'un objet de valeur est basée sur leur état plutôt que sur leur identité d'objet et est immuable. Un exemple du monde réel serait Color.RED, Color.BLUE, SEX.FEMALE, etc.

POJO vs JavaBeans

[1] Le Java-Beanness d'un POJO est que ses attributs privés sont tous accessibles via des accesseurs et des getters publics conformes aux conventions JavaBeans. par exemple

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

[2] JavaBeans doit implémenter Serializable et avoir un constructeur sans argument, alors que dans POJO, ces restrictions n'existent pas.

Fondamentalement,

DTO: "Objets de transfert de données". peut voyager entre des couches distinctes dans l'architecture logicielle.

VO: "objets de valeur" contenir un objet tel que Integer, Money, etc.

POJO: Objet Java ancien et normal qui n'est pas un objet spécial.

Java Beans: nécessite que la classe Java soit sérialisable, possède un constructeur no-arg et un getter / setter pour chaque champ

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

La spécification JavaBeans dans Java 1.0 était celle de Sun tenter d'autoriser les objets Java à être manipulés dans un IDE ressemblant à VB. Des règles ont été définies pour les objets qualifiés de "Java Beans":

  1. Constructeur par défaut
  2. Getters et setters pour les membres de données privées qui ont suivi la convention de dénomination appropriée
  3. Sérialisable
  4. Peut-être que d'autres que j'oublie.

Les EJB sont arrivés plus tard. Ils combinent des composants distribués et un modèle transactionnel, s'exécutant dans un conteneur qui gère les threads, le regroupement, le cycle de vie et fournit des services. Ils sont loin des beans Java.

Les DTO sont apparus dans le contexte Java car les utilisateurs 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 utilisateurs les empaquetaient en vrac dans Java Beans et les expédiaient.

Les POJO étaient une réaction contre les EJB.

POJO : C’est un fichier java (classe) qui n’étend ni ne met en oeuvre aucun autre fichier java (classe).

Bean : Il s’agit d’un fichier java (classe) dans lequel toutes les variables sont privées, les méthodes sont publiques et des getters et setters appropriés sont utilisés pour l’accès aux variables.

Classe normale : Il s’agit d’un fichier java (classe) pouvant être constitué de variables publiques / privées / par défaut / protégées et pouvant éventuellement étendre ou implémenter un autre fichier java (classe).

Premier entretien

Classe normale - signifie que toute classe définit normalement comme étant en java, cela signifie que vous créez un type de propriétés de méthode différent etc.
Bean - Le bean n’est rien. C’est seulement un objet de cette classe particulière qui utilise ce bean. Vous pouvez accéder à votre classe java de la même manière que object. .

et après cela, parler du dernier POJO

POJO - POJO est une classe qui ne possède aucun service. Elle ne comporte qu'un constructeur par défaut, une propriété privée et ces propriétés permettant de définir une valeur correspondant aux méthodes setter et getter. C'est une forme abrégée d'objet Java simple.

  • Objet de valeur : à utiliser lorsque nécessaire pour mesurer l'égalité des objets en fonction de la valeur des objets.
  • Objet de transfert de données : transférez des données avec plusieurs attributs en une seule fois, d'un client à un autre, sur plusieurs couches, pour éviter les appels multiples au serveur distant.
  • Objet Java simple et standard : c'est comme une simple classe dont les propriétés sont un constructeur public sans argument. Comme nous le déclarons pour l'entité JPA.

différence-entre-valeur-modèle-objet-et-motif-transfert-données-modèle

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