Qu’est-ce que le terme Plain Old Java Object (POJO) signifie exactement?

Que signifie le terme Plain Old Java Object (POJO) ? Je n’ai rien trouvé d’explicatif.

La page Wikipedia de POJO indique que POJO est un object Java ordinaire et non un object spécial. Maintenant, qu’est-ce qui fait ou ce qui ne fait pas et object spécial en Java?

La page ci-dessus indique également qu’un POJO ne devrait pas avoir à étendre les classes pré-spécifiées, à mettre en œuvre des interfaces pré-spécifiées ou à contenir des annotations pré-spécifiées. Est-ce que cela signifie également que les POJO ne sont pas autorisés à implémenter des interfaces telles que Serializable , Comparable ou des classes comme Applets ou toute autre classe / interface écrite par l’utilisateur?

En outre, la stratégie ci-dessus (pas d’extension, pas de mise en œuvre) signifie-t-elle que nous ne sums pas autorisés à utiliser des bibliothèques externes?

Où sont exactement les POJO utilisés?

EDIT: Pour être plus précis, suis-je autorisé à étendre / implémenter des classes / interfaces qui font partie de Java ou de bibliothèques externes?

Plain Old Java Object Le nom est utilisé pour souligner qu’un object donné est un object Java ordinaire, et non un object spécial tel que celui défini par le framework EJB 2.

Classe A {}
la classe B étend / implémente C {}

Remarque: B est non POJO lorsque C est une sorte de classe de structure dissortingbuée ou ifc. Par exemple javax.servlet.http.HttpServlet, javax.ejb.EntityBean ou J2EE extn et non sérialisable / comparable. Depuis sérialisable / comparable sont valables pour POJO.

Ici, A est un object simple qui est indépendant. B est un object spécial puisque B étend / implémente C. L’object B obtient donc plus de sens à partir de C et B est ressortingctif pour suivre les règles de C. et B est étroitement lié au cadre dissortingbué. Par conséquent, l’object B n’est pas POJO de sa définition.

Code utilisant la classe Une référence d’object n’a pas besoin de connaître le type de celle-ci et peut être utilisée avec plusieurs frameworks.

Ainsi, un POJO ne devrait pas avoir à 1) étendre les classes pré-spécifiées et 2) à mettre en œuvre des interfaces pré-spécifiées.

JavaBean est un exemple de POJO sérialisable, doté d’un constructeur sans argument et permettant d’accéder aux propriétés à l’aide des méthodes getter et setter qui suivent une convention d’appellation simple.

POJO se concentre uniquement sur la logique métier et ne dépend pas des frameworks (d’entreprise). Cela signifie qu’il a le code pour la logique métier mais comment cette instance est créée, quel service (EJB ..) cet object appartient et quelles sont ses caractéristiques spéciales (Stateful / Stateless), il sera décidé par les frameworks en utilisant xml externe fichier.

Exemple 1: JAXB est le service pour représenter un object Java en XML; Ces objects Java sont simples et proposent des constructeurs getters et setters par défaut.

Exemple 2: Mise en veille prolongée où la classe Java simple sera utilisée pour représenter une table. les colonnes seront ses instances.

Exemple 3: services REST. Dans les services REST, Service Layer et Dao Layer effectueront certaines opérations sur la firebase database. Donc, Dao aura des requêtes et des opérations spécifiques aux fournisseurs. La couche de service sera responsable d’appeler quelle couche DAO pour effectuer des opérations de firebase database. Les API Create ou Update (méthodes) de DAO prendront les POJO comme arguments et mettront à jour ces POJO et les inséreront / mettront à jour dans la firebase database. Ces POJO (classe Java) auront uniquement des états (variables d’instance) pour chaque colonne et ses getters et setters.

En pratique, certaines personnes trouvent les annotations élégantes, tandis qu’elles considèrent le XML comme étant verbeux, laid et difficile à gérer, alors que d’autres trouvent que les annotations polluent le modèle POJO. Ainsi, comme alternative à XML, de nombreux frameworks (par exemple, Spring, EJB et JPA) permettent d’utiliser des annotations à la place ou en plus de XML:

Avantages:
Le découplage du code d’application des infrastructures est l’un des nombreux avantages de l’utilisation des POJO. L’utilisation future de POJO prouve la logique métier de votre application en la découplant des structures d’infrastructure volatiles et en constante évolution. La mise à niveau vers une nouvelle version ou le passage à une autre structure devient plus facile et moins risqué. Les POJO facilitent également les tests, ce qui simplifie et accélère le développement. Votre logique métier sera plus claire et plus simple car elle ne sera pas mêlée au code d’infrastructure

Références: source wiki2

Selon Martin Fowler , lui et d’autres l’ont proposé comme moyen de décrire quelque chose qui était une classe standard par opposition à un EJB, etc.

L’utilisation du terme implique ce qu’il est censé vous dire. Si, par exemple, une structure d’dependency injection vous indique que vous pouvez injecter un POJO dans un autre POJO, vous voulez dire que vous n’avez rien à faire de particulier: il n’y a pas besoin d’obéir à des contrats avec votre object, d’implémenter des interfaces ou étendre des classes spéciales. Vous pouvez simplement utiliser ce que vous avez déjà.

UPDATE Pour donner un autre exemple: alors qu’Hibernate peut mapper tout object POJO (tout object que vous avez créé) sur des tables SQL, dans Core Data (Objective C sur l’iPhone), vos objects doivent étendre NSManagedObject pour que le système puisse les persister. une firebase database. En ce sens, Core Data ne peut fonctionner avec aucun POJO (ou plutôt POOCO = PlainOldObjectiveCObject) tant qu’Hibernate peut le faire. (Je ne pourrais pas corriger à 100% les données de base depuis que je viens juste de commencer à les récupérer. Tous les conseils / corrections sont les bienvenus :-)).

Plain Old Java Object 🙂

Eh bien, vous dites que ce sont toutes des ressortingctions terribles.

Dans le contexte habituel où POJO est / est utilisé, cela ressemble plus à un avantage:

Cela signifie que n’importe quelle bibliothèque / API avec laquelle vous travaillez est parfaitement prête à travailler avec des objects Java qui n’ont été ni manipulés ni manipulés, c.-à-d. Que vous n’avez rien à faire pour les faire fonctionner.

Par exemple, le processeur XML XStream va (je pense) sérieusement sérialiser les classes Java qui n’implémentent pas l’interface Serializable . C’est un plus! De nombreux produits qui fonctionnent avec des objects de données utilisés pour vous forcer à implémenter SomeProprietaryDataObject ou même étendre une classe AbstractProprietaryDataObject . De nombreuses bibliothèques s’attendront à un comportement des haricots, c’est-à-dire des getters et des régleurs.

En règle générale, tout ce qui fonctionne avec les POJO fonctionnera également avec ceux qui ne le sont pas. Ainsi, XStream va bien sûr également sérialiser les classes sérialisables.

POJO est un object Java simple, comparé à quelque chose nécessitant des fonctionnalités Enterprise Edition (J2EE) (beans etc …).

POJO n’est pas vraiment une définition difficile, mais plutôt une manière manuelle de décrire les objects Java «non» normaux de l’entreprise. Que vous utilisiez une bibliothèque ou un framework externe pour créer un object POJO ou non, cela dépend en grande partie de la bibliothèque / du framework, bien que je m’imagine qu’un framework ferait quelque chose de moins qu’un POJO

L’intérêt d’un POJO est la simplicité et vous semblez supposer que c’est quelque chose de plus compliqué qu’il n’y paraît.

Si une bibliothèque prend en charge un object POJO, cela implique qu’un object de n’importe quelle classe est acceptable. Cela ne signifie pas que le POJO ne peut pas avoir d’annotations / interface ou qu’il ne sera pas utilisé s’il y en a, mais ce n’est pas obligatoire.

IMHO La page wiki est assez claire. Il ne dit pas qu’un POJO ne peut pas avoir d’annotations / interfaces.

Un object POJO (Plain Old Java Object) contenant toute la logique métier de votre extension.

Exp. Pojo qui contient une seule méthode

 public class Extension { public static void logInfo(Ssortingng message) { System.out.println(message); } } 

Que signifie le terme Plain Old Java Object (POJO)?

POJO a été inventé par Martin Fowler, Rebecca Parsons et Josh Mackenzie alors qu’ils se préparaient pour une conférence lors d’une conférence en septembre 2000. Martin Fowler dans Patterns of Enterprise Application Architecture explique comment implémenter un modèle de modèle de domaine en Java. Après avoir énuméré certains des inconvénients de l’utilisation d’ EJB Entity Beans :

Il y a toujours beaucoup de chaleur lorsque les gens parlent de développer un modèle de domaine dans J2EE. La plupart des supports pédagogiques et des livres d’introduction à J2EE suggèrent que vous utilisiez des beans entité pour développer un modèle de domaine, mais cette approche présente de sérieux problèmes, du moins avec la spécification actuelle (2.0).

Les beans Entity sont particulièrement utiles lorsque vous utilisez la persistance CMP (Container Managed Persistence) …

Entity beans ne peut pas être ré-entrant. Autrement dit, si vous appelez d’un bean entité dans un autre object, cet autre object (ou tout object qu’il appelle) ne peut pas rappeler dans le premier bean entité …

… Si vous avez des objects distants avec des interfaces fines, vous obtenez des performances terribles …

Pour exécuter avec des beans entité, vous avez besoin d’un conteneur et d’une firebase database connectée. Cela augmentera les temps de compilation et augmentera également le temps d’exécution des tests car les tests doivent être exécutés sur une firebase database. Les bean Entity sont également difficiles à déboguer.

En guise d’alternative, il propose d’utiliser l’ implémentation de Java Standard Objects for Domain Model:

L’alternative consiste à utiliser des objects Java normaux, bien que cela provoque souvent une réaction surprise: il est surprenant de voir combien de personnes pensent qu’il est impossible d’exécuter des objects Java standard dans un conteneur EJB. Je suis arrivé à la conclusion que les gens oublient les objects Java réguliers, car ils ne possèdent pas de nom sophistiqué. C’est pourquoi, en préparant une conférence en 2000, Rebecca Parsons, Josh Mackenzie et moi-même leur avons donné un: POJO (Plain Old Java Objects) . Un modèle de domaine POJO est facile à assembler, se construit rapidement, peut être exécuté et testé en dehors d’un conteneur EJB et est indépendant d’EJB (c’est peut-être pour cette raison que les fournisseurs EJB ne vous encouragent pas à les utiliser).