2010-07-24 25 views
66

¿Qué significa el término Plain Old Java Object (POJO)? No pude encontrar nada lo suficientemente explicativo.¿Qué significa exactamente el término antiguo objeto Java plano (POJO)?

POJO's Wikipedia page dice que POJO es un objeto común de Java y no un objeto especial. Ahora, ¿qué hace o qué no hace y objeto especial en Java?

La página anterior también dice que un POJO no debería tener que extender clases preespecificadas, implementar interfaces preespecificadas o contener anotaciones preespecificadas. ¿Eso también significa que los POJO no tienen permitido implementar interfaces como Serializable, Comparable o clases como Applets o cualquier otra clase/interfaz escrita por el usuario?

Además, ¿la política anterior (sin extensión, sin implementación) significa que no se nos permite usar ninguna biblioteca externa?

¿Dónde se usan exactamente los POJO?

EDITAR: Para ser más específicos, ¿puedo extender/implementar clases/interfaces que son parte de Java o de cualquier biblioteca externa?

+8

Buena pregunta, Parece que hay muchas variaciones en lo que realmente es un POJO. Uso el término casi a diario y no estoy seguro de lo que significa exactamente ahora que lo pienso. +1 –

+0

Simplemente no lo confundas con un C++ POD. –

Respuesta

6

Plain Old Java Object :)

Bueno, hacer que suene como los que son todas las restricciones terribles.

En el contexto habitual en el que se se utilizan/POJO, es más como un beneficio:

Esto significa que cualquiera que sea la biblioteca/API que está trabajando está perfectamente dispuesto a trabajar con objetos Java que no han sido manipulado o maltratado de cualquier manera, es decir, no tienes que hacer nada especial para que funcionen.

Por ejemplo, el procesador XStream XML (creo) felizmente serializará las clases de Java que no implementan la interfaz Serializable. ¡Eso es una ventaja! Muchos productos que funcionan con objetos de datos solían forzarlo a implementar SomeProprietaryDataObject o incluso ampliar una clase AbstractProprietaryDataObject. Muchas bibliotecas esperarán comportamiento del frijol, es decir, getters y setters.

Por lo general, todo lo que funciona con POJO también funcionará con not-so-PO-JO. Por lo tanto, XStream también serializará las clases de Serializable.

4

POJO es un Objeto Java Plain Old - en comparación con algo que necesita cosas de Enterprise Edition (J2EE) (frijoles, etc. ...).

POJO no es realmente una definición difícil y rápida, y más una forma ondulada a mano de describir objetos Java no empresariales "normales". Si el uso de una biblioteca o marco externo hace que un objeto sea POJO o no, está en el ojo del espectador, dependiendo en gran medida de QUÉ biblioteca/marco, aunque me aventuraría a adivinar que un marco haría algo menos que un POJO

+0

¿Los serializables y comparables tampoco son POJO? –

7

El uso del término implica lo que se supone que debe decirle. Si, por ejemplo, un marco de inyección de dependencia le dice que puede inyectar un POJO en otro POJO, quiere decir que no tiene que hacer nada especial: no hay necesidad de obedecer ningún contrato con su objeto, implementar ninguna interfaz o extender clases especiales. Puedes usar lo que ya tienes.

ACTUALIZACIÓN Para dar otro ejemplo: mientras que Hibernate puede asignar cualquier POJO (cualquier objeto que ha creado) a las tablas SQL, en la base de datos (Objective C en el iPhone) los objetos tienen que extenderse NSManagedObject con el fin de que el sistema ser capaz de persistir en una base de datos. En ese sentido, Core Data no puede funcionar con ningún POJO (o más bien POOCO = PlainOldObjectiveCObject) mientras que Hibernate puede hacerlo. (Es posible que no haya corregido al 100% los datos básicos ya que empecé a buscarlos. Cualquier sugerencia/corrección es bienvenida :-)).

9

According to Martin Fowler, él y algunos otros vinieron con ella como una manera de describir algo que era una clase estándar en lugar de un EJB etc.

3

El punto entero de un POJO es la simplicidad y que parece estar asumiendo es algo más complicado de lo que parece.

Si una biblioteca admite un POJO, implica que un objeto de cualquier clase es aceptable. No significa que el POJO no puede tener anotaciones/interfaz o que no se usarán si están allí, pero no es un requisito.

En mi humilde opinión La página wiki es bastante clara. No dice que un POJO no puede tener anotaciones/interfaces.

56

Plain Old Java Object El nombre se utiliza para enfatizar que un objeto dado es un objeto Java ordinario, no un objeto especial como los definidos por el marco EJB 2.

class A {}
clase B se extiende/implementa C {}

Nota: B es no POJO cuando C es una especie de distribuye clase marco o IFC. p. javax.servlet.http.HttpServlet, javax.ejb.EntityBean o J2EE extn y no serializable/comparable. Dado que serializable/comparable son válidos para POJO.

Aquí A es un objeto simple que es independiente. B es un Obj especial ya que B está extendiendo/implementando C. Entonces el objeto B obtiene un significado más de C y B es restrictivo para seguir las reglas de C. y B es estrechamente acoplado con marco distribuido. Por lo tanto, el objeto B no es POJO desde su definición.

El código que utiliza la referencia de objeto de clase A no tiene que saber nada sobre el tipo de él, y se puede utilizar con muchos marcos.

Por lo tanto, un POJO no debería tener que 1) ampliar las clases preespecificadas y 2) Implementar las interfaces preespecificadas.

JavaBean es un ejemplo de POJO que es serializable, tiene un constructor sin argumentos, y permite el acceso a las propiedades utilizando los métodos getter y setter que siguen una simple convención de nomenclatura.

POJO se centra exclusivamente en la lógica empresarial y no tiene dependencias en los marcos (empresariales). Significa que tiene el código para la lógica de negocios, pero cómo se crea esta instancia, a qué servicio (EJB ..) pertenece este objeto y cuáles son sus características especiales (Stateful/Stateless) que tiene serán decididas por los marcos mediante el uso de recursos externos archivo xml

Ejemplo 1: JAXB es el servicio para representar el objeto java como XML; Estos objetos java son simples y se presentan con getters y setters de constructor por defecto.

Ejemplo 2: Hibernate donde se usará la clase java simple para representar una tabla. las columnas serán sus instancias.

Ejemplo 3: servicios REST. En los servicios REST tendremos Service Layer y Dao Layer para realizar algunas operaciones sobre DB. Así que Dao tendrá consultas y operaciones específicas del proveedor. Service Layer será responsable de llamar a la capa DAO para realizar operaciones DB. Crear o actualizar la API (métodos) de DAO será tomar POJO como argumentos, actualizar esos POJO e insertar/actualizar en DB. Estos POJO (clase Java) solo tendrán estados (variables de instancia) de cada columna y sus getters y setters.

En la práctica, algunas personas consideran que las anotaciones son elegantes, mientras que consideran que XML es detallado, feo y difícil de mantener, mientras que otras encuentran que las anotaciones contaminan el modelo POJO. Por lo tanto, como una alternativa a XML, muchos marcos (por ejemplo Spring, EJB y JPA) permiten anotaciones a utilizarse en lugar o además de XML:

Ventajas:
desacoplar el código de la aplicación de los marcos de infraestructura es uno de los muchos beneficios de usar POJOs. El uso de POJOs a prueba la lógica de negocios de su aplicación desvinculando los marcos de infraestructura volátiles y en constante evolución. Actualizar a una nueva versión o cambiar a un marco diferente se vuelve más fácil y menos arriesgado. Los POJO también facilitan las pruebas, lo que simplifica y acelera el desarrollo. Su lógica de negocio será más clara y sencilla, ya que no se enreda con el código de infraestructura

Referencias: wikisource2

+2

+1 para Muy bonito, corto y dulce hasta el punto de respuesta. – iLearner

0

objeto A Plain Old Java (POJO) que contiene toda la lógica de negocio para su extensión.

Exp. POJO que contiene un único método

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

¿Qué significa el término Plain Old Java Object (POJO)?

POJO fue acuñado por Martin Fowler, Rebecca Parsons y Josh Mackenzie cuando se estaban preparando para una charla en una conferencia en septiembre de 2000. Martin Fowler en Patterns of Enterprise Application Architecture explica cómo implementar un modelo de dominio patrón en Java . Después de enumerar algunas de las desventajas de usar beans EJB de entidad:

Siempre hay una gran cantidad de calor generado cuando se habla de el desarrollo de un modelo de dominio en J2EE. Muchos de los materiales de enseñanza y los libros introductorios J2EE sugieren que se usen beans de entidad para desarrollar un modelo de dominio , pero existen algunos problemas graves con este enfoque, al menos con la especificación actual (2.0).

beans de entidad son más útiles cuando se utiliza gestionada por contenedor Persistencia (CMP) ...

beans de entidad no pueden ser re-entrante. Es decir, si llama desde un bean de entidad a otro objeto, ese otro objeto (o cualquier objeto que llame a ) no puede devolver la llamada al primer bean de entidad ...

... Si tiene objetos remotos con interfaces de grano fino se obtiene desempeño terrible ...

Para ejecutar con beans de entidad que necesita un recipiente y una base de datos conectada . Esto aumentará los tiempos de compilación y también aumentará el tiempo para ejecutar pruebas ya que las pruebas se deben ejecutar en una base de datos. Los beans de entidad también son difíciles de depurar.

Como alternativa, propuso utilizar Java Regular Objetos para la implementación del modelo de dominio:

La alternativa es utilizar objetos Java normales, aunque esto a menudo provoca una reacción que sorprende es increíble cuántas personas piensan que no se pueden ejecutar objetos regulares de Java en un contenedor EJB. He llegado a la conclusión de que la gente se olvida de los objetos normales de Java porque no tienen un nombre elegante. Es por eso que, mientras se preparaba para una charla en 2000, Rebecca Parsons, Josh Mackenzie, y yo les dimos uno: POJOs (objetos simples antiguos de Java). Un modelo de dominio POJO es fácil de armar, es rápido de construir, puede ejecutarse y probarse fuera de un contenedor EJB, y es independiente de EJB (tal vez por eso los proveedores de EJB no lo alientan para usarlos).

Cuestiones relacionadas