JavaBeans
Un JavaBean est une classe qui suit les conventions JavaBeans telles que définies par Sun. Wikipedia a un assez bon résumé de ce que sont les JavaBeans:
Les JavaBeans sont des composants logiciels réutilisables pour Java qui peuvent être manipulés visuellement dans un outil de construction. Pratiquement, ce sont des classes écrites dans le langage de programmation Java conformes à une convention particulière. Ils sont utilisés pour encapsuler de nombreux objets dans un seul objet (le bean), afin qu'ils puissent être transmis en tant qu'un seul objet bean au lieu de plusieurs objets individuels. Un JavaBean est un objet Java qui est sérialisable, possède un constructeur nullaire et permet d'accéder aux propriétés à l'aide de méthodes setter et getter.
Pour fonctionner en tant que classe JavaBean, une classe d'objet doit respecter certaines conventions en matière de nommage de méthodes, de construction et de comportement. Ces conventions permettent d'avoir des outils qui peuvent utiliser, réutiliser, remplacer et connecter les JavaBeans.
Les conventions requises sont les suivantes:
- La classe doit avoir un constructeur par défaut public. Cela permet une instantiation facile dans les cadres d'édition et d'activation.
- Les propriétés de la classe doivent être accessibles en utilisant des méthodes get, set, et d'autres méthodes (appelées méthodes d'accès et méthodes de mutation), en suivant une convention de nommage standard. Cela permet une inspection automatisée et une mise à jour facile de l'état du bean dans les frameworks, dont beaucoup incluent des éditeurs personnalisés pour divers types de propriétés.
- La classe doit être sérialisable. Cela permet aux applications et aux frameworks de sauvegarder, stocker et restaurer de manière fiable l'état du bean de manière indépendante de la VM et de la plate-forme.
Étant donné que ces exigences sont largement exprimées sous forme de conventions plutôt que par la mise en œuvre d'interfaces, certains développeurs considèrent les JavaBeans comme des Plain Old Java Objects qui suivent des conventions de nommage spécifiques.
POJO
Un Plain Old Java Object ou POJO est un terme initialement introduit pour désigner un simple objet Java léger, n'implémentant aucune interface javax.ejb
, contrairement aux lourdes EJB 2.x (notamment les Entity Beans, les Stateless Session Beans ne sont pas si mauvais à mon avis). Aujourd'hui, le terme est utilisé pour tout objet simple sans éléments supplémentaires. Encore une fois, Wikipedia fait un bon travail pour définir POJO:
POJO est un acronyme pour Plain Old Java Object. Le nom est utilisé pour souligner que l'objet en question est un objet Java ordinaire, pas un objet spécial, 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 contre l'utilisation d'objets réguliers dans leurs systèmes et nous avons conclu que c'était parce que les objets simples manquaient d'un nom fantaisiste. Nous leur en avons donné un, et cela a très bien pris."
Le terme poursuit le schéma des anciens termes pour les technologies qui n'utilisent pas de nouvelles fonctionnalités fantaisistes, comme POTS (Plain Old Telephone Service) en téléphonie, et PODS (Plain Old Data Structures) qui sont définis en C++ mais utilisent uniquement les fonctionnalités du langage C, et POD (Plain Old Documentation) en Perl.
Le terme a très probablement acquis une acceptation généralisée en raison du besoin d'un terme commun et facile à comprendre qui se distingue des cadres d'objets compliqués. Un JavaBean est un POJO qui est sérialisable, possède un constructeur sans argument et permet d'accéder aux propriétés à l'aide de méthodes getter et setter. Un Enterprise JavaBean n'est pas une seule classe mais un modèle de composant entier (encore une fois, EJB 3 réduit la complexité des Enterprise JavaBeans).
À mesure que les conceptions utilisant des POJOs sont devenues plus courantes, des systèmes sont apparus qui fournissent aux POJOs une partie des fonctionnalités utilisées dans les frameworks et offrent plus de choix sur les domaines de fonctionnalité réellement nécessaires. Hibernate et Spring en sont des exemples.
Value Object
Un Value Object ou VO est un objet tel que java.lang.Integer
qui stocke des valeurs (d'où les objets de valeur). Pour une définition plus formelle, je me réfère souvent à la description de Value Object de Martin Fowler sur Value Object:
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 les sémantiques de valeur plutôt que les sémantiques de référence.
Vous pouvez généralement les reconnaître car leur notion d'égalité n'est pas basée sur l'identité, 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 règle générale est que les objets de valeur doivent être entièrement immuables. Si vous souhaitez modifier un objet de valeur, vous devez le remplacer par un nouveau et non permettre de mettre à jour les valeurs de l'objet de valeur lui-même - les objets de valeur modifiables entraînent des problèmes d'aliasing.
Les premières publications J2EE utilisaient le terme value object pour décrire une notion différente, ce que j'appelle un Data Transfer Object. Ils ont depuis modifié leur utilisation et utilisent le terme Transfer Object à la place.
Vous pouvez trouver plus de bonnes ressources sur les objets de valeur sur le wiki et par Dirk Riehle.
Data Transfer Object
Un Data Transfer Object ou DTO est un motif (anti) introduit avec EJB. Au lieu d'effectuer de nombreux appels distants sur des EJB, l'idée était d'encapsuler des données dans un objet de valeur pouvant être transféré sur le réseau : un Data Transfer Object. Wikipedia donne une définition décente de Data Transfer Object:
Le Data Transfer Object (DTO), anciennement connu sous le nom d'objets de valeur ou VO, est un motif de conception utilisé pour transférer des données entre les sous-systèmes d'une application logicielle. Les DTO sont souvent utilisés en conjonction 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 pas de comportement sauf pour le stockage et la récupération de ses propres données (accèsseurs et mutateurs).
Dans une architecture EJB traditionnelle, les DTO remplissent deux objectifs : d'une part, ils contournent le problème selon lequel les beans entité ne sont pas sérialisables ; d'autre part, ils définissent implicitement une phase d'assemblage où toutes les données à utiliser par la vue sont récupérées et assemblées dans les DTO avant de renvoyer le contrôle à la couche de présentation.
Ainsi, pour de nombreuses personnes, les DTO et les VO sont la même chose (mais Fowler utilise les VO pour signifier autre chose comme nous l'avons vu). La plupart du temps, ils suivent les conventions JavaBeans et sont donc également des JavaBeans. Et tous sont des POJOs.
1 votes
POJO vient sans restriction alors que javabeans vient avec les restrictions mentionnées ci-dessus