stringtranslate.com

Plain Old Java Objeto

En ingeniería de software , un objeto Java antiguo ( POJO ) es un objeto Java ordinario , que no está sujeto a ninguna restricción especial. El término fue acuñado por Martin Fowler , Rebecca Parsons y Josh MacKenzie en septiembre de 2000: [1]

"Nos preguntamos por qué la gente estaba tan en contra del uso de objetos regulares en sus sistemas y llegamos a la conclusión de que era porque los objetos simples carecían de un nombre elegante. Así que les dimos uno y lo entendieron muy bien". [1]

El término "POJO" inicialmente denotaba un objeto Java que no sigue ninguno de los principales modelos, convenciones o marcos de objetos de Java. Desde entonces, ha sido adoptado como un término independiente del lenguaje, debido a la necesidad de un término común y de fácil comprensión que contraste con los complicados marcos de objetos. [ cita necesaria ]

El término continúa un patrón de acrónimo para acuñar retrónimos para construcciones que no utilizan características nuevas y sofisticadas:

Definición

Idealmente hablando, un POJO es un objeto Java que no está sujeto a ninguna restricción distinta de las impuestas por la Especificación del lenguaje Java; es decir, un POJO no debería tener que hacerlo

  1. Ampliar clases preespecificadas, como en
    La clase pública Foo extiende javax . servlet . http . HttpServlet { ...      
  2. Implementar interfaces preespecificadas, como en
    La clase pública Bar implementa javax . ejb . EntidadBean { ...      
  3. Contener anotaciones preespecificadas , como en
    @javax.persistence.Entity clase pública Baz { ...     

Sin embargo, debido a dificultades técnicas y otras razones, muchos productos o marcos de software descritos como compatibles con POJO en realidad todavía requieren el uso de anotaciones predeterminadas para que funciones como la persistencia funcionen correctamente. La idea es que si el objeto (en realidad la clase) fuera un POJO antes de que se agregaran las anotaciones y regresara al estado de POJO si se eliminan las anotaciones, entonces aún se puede considerar un POJO. Entonces, el objeto básico sigue siendo un POJO en el sentido de que no tiene características especiales (como una interfaz implementada) que lo convierta en un "Objeto Java especializado" (SJO o (sic) SoJO).

Variaciones contextuales

JavaBean

Un JavaBean es un POJO que es serializable , tiene un constructor sin argumentos y permite el acceso a propiedades mediante métodos getter y setter que siguen una convención de nomenclatura simple. Gracias a esta convención, se pueden hacer referencias declarativas simples a las propiedades de JavaBeans arbitrarios. El código que utiliza dicha referencia declarativa no tiene que saber nada sobre el tipo de bean, y el bean se puede usar con muchos marcos sin que estos marcos tengan que saber el tipo exacto de bean. La especificación JavaBeans, si se implementa completamente, rompe ligeramente el modelo POJO ya que la clase debe implementar la interfaz Serializable para ser un verdadero JavaBean. Muchas clases POJO que todavía se llaman JavaBeans no cumplen con este requisito. Dado que Serializable es una interfaz de marcador (sin método), esto no es una gran carga.

A continuación se muestra un ejemplo de un componente JavaServer Faces (JSF) que tiene un enlace bidireccional a la propiedad de un POJO:

<h:inputText valor= "#{MyBean.someProperty}" /> 

La definición del POJO puede ser la siguiente:

clase pública MyBean {    cadena privada alguna propiedad ;   cadena pública getSomeProperty () { return algunaProperty ; }       public void setSomeProperty ( String algunaProperty ) { this . algunaPropiedad = algunaPropiedad ; } }        

Debido a las convenciones de nomenclatura de JavaBean, la referencia única "someProperty" se puede traducir automáticamente al método "getSomeProperty()" (o "isSomeProperty()" si la propiedad es de tipo booleano ) para obtener un valor, y al método "setSomeProperty( String)" método para establecer un valor.

Agregar servicios de forma transparente

A medida que los diseños que utilizan POJO se han vuelto más utilizados, han surgido sistemas que brindan a los POJO la funcionalidad completa utilizada en los marcos y más opciones sobre qué áreas de funcionalidad son realmente necesarias. En este modelo, el programador no crea nada más que un POJO. Este POJO se centra exclusivamente en la lógica empresarial y no depende de marcos (empresariales). Luego, los marcos de programación orientada a aspectos (AOP) agregan de forma transparente preocupaciones transversales como persistencia, transacciones, seguridad, etc. [6]

Spring fue una implementación temprana de esta idea y una de las fuerzas impulsoras detrás de la popularización de este modelo.

Un ejemplo de un bean EJB como POJO:

A continuación se muestra un bean EJB completamente funcional, que demuestra cómo EJB3 aprovecha el modelo POJO:

clase pública HolaMundoServicio {    public String decirHola () { return "¡Hola mundo!" ; } }      

Como se indicó, el bean no necesita extender ninguna clase EJB ni implementar ninguna interfaz EJB y tampoco necesita contener ninguna anotación EJB. En cambio, el programador declara en un archivo XML externo qué servicios EJB deben agregarse al bean:

<enterprise-beans> <sesión> <ejb-name> helloWorld </ejb-name> <ejb-class> com.example.HelloWorldService </ejb-class> <session-type> sin estado </session-type> </ sesión> </enterprise-beans>     

En la práctica, algunas personas encuentran que las anotaciones son elegantes, mientras que XML les parece detallado, feo y difícil de mantener, mientras que otros encuentran que las anotaciones contaminan el modelo POJO. [7]

Por lo tanto, como alternativa a XML, muchos marcos (por ejemplo, Spring, EJB y JPA) permiten el uso de anotaciones en lugar de XML o además de él. A continuación se muestra el mismo bean EJB que se muestra arriba pero con una anotación agregada. En este caso, el archivo XML ya no es necesario:

@Clase pública sin estado HelloWorldService {    public String decirHola () { return "¡Hola mundo!" ; } }      

Con la anotación dada anteriormente, el bean ya no es un POJO verdaderamente puro, pero dado que las anotaciones son meramente metadatos pasivos, esto tiene muchos menos inconvenientes dañinos en comparación con la invasividad de tener que extender clases y/o implementar interfaces. [6] En consecuencia, el modelo de programación sigue siendo muy parecido al modelo POJO puro.

Acrónimos relacionados

Interfaz Java simple y antigua

Una interfaz Java simple (POJI) es una forma básica de interfaz Java y aceptable en puntos donde no se permiten interfaces Java más complejas. [8] : 57, 572, 576, 579, 1340 

Ver también

Referencias

  1. ^ ab "MF Bliki: POJO". MartinFowler.com .
  2. ^ Almaer, Dion (17 de julio de 2006). "Regreso del POJO: JavaScript simple y antiguo". Ajaxiano . Archivado desde el original el 13 de septiembre de 2014 . Consultado el 19 de agosto de 2014 .
  3. ^ "Soporte POCO". microsoft.com . Consultado el 27 de mayo de 2012 .
  4. ^ Kneschke, enero (19 de febrero de 2007). "objetos con seguridad de tipos en PHP". kneschke.de . Archivado desde el original el 26 de marzo de 2012 . Consultado el 27 de mayo de 2012 .
  5. ^ Cheong, Jym (26 de junio de 2011). "Controlador con objeto PHP antiguo y básico, también conocido como POPO". jym.sg. ​Archivado desde el original el 26 de marzo de 2012 . Consultado el 27 de mayo de 2012 .
  6. ^ ab Martín, Robert C; (2008); Código limpio , Capítulo 11, Marcos AOP de Java puro
  7. ^ Panda, Debu; Rahmán, Reza; Carril, Derek; (2007). EJB 3 en acción , Manning Publications Co., Shelter Island (Nueva York), ISBN 978-1-93-398834-4 (www.manning.com/books/ejb-3-in-action). Capítulo 11, Descriptores de implementación frente a anotaciones 
  8. ^ Wahli, Ueli; Vieira, Miguel; Gomes, Ferreira Lopes; Hainey, Brian; Moharram, Ahmed; Nápoles, JuanPablo; Rohr, Marco; Cui, Henry; Gan, Patricio; González, Celso; Ugurlu, Pinar; Ziosi, Lara (29 de junio de 2009). Guía de programación de Rational Application Developer V7.5 . Libros rojos de IBM. ISBN 978-0738432892.