patron example entre ejemplo diferencia clases beans bean java terminology javabeans dto pojo

java - example - patron dto vo



¿Diferencia entre DTO, VO, POJO, JavaBeans? (6)

JavaBeans

Un JavaBean es una clase que sigue las convenciones de JavaBeans definidas por Sun. Wikipedia tiene un buen resumen de lo que son los JavaBeans :

Los JavaBeans son componentes de software reutilizables para Java que pueden manipularse visualmente en una herramienta de creación. En la práctica, son clases escritas en el lenguaje de programación Java conforme a una convención particular. Se utilizan para encapsular muchos objetos en un solo objeto (el bean), de modo que se pueden pasar como un solo objeto de bean en lugar de como múltiples objetos individuales. Un JavaBean es un objeto Java que puede ser serializado, tiene un constructor nulo y permite el acceso a las propiedades utilizando métodos de obtención y establecimiento.

Para funcionar como una clase de JavaBean, una clase de objeto debe obedecer ciertas convenciones sobre nomenclatura de métodos, construcción y comportamiento. Estas convenciones hacen posible tener herramientas que pueden usar, reutilizar, reemplazar y conectar JavaBeans.

Las convenciones requeridas son:

  • La clase debe tener un constructor público predeterminado. Esto permite una fácil creación de instancias dentro de marcos de edición y activación.
  • Las propiedades de la clase deben ser accesibles utilizando los métodos get, set y otros (denominados métodos de acceso y métodos mutadores), siguiendo una convención de nomenclatura estándar. Esto permite una fácil inspección y actualización automatizada del estado del bean dentro de los marcos, muchos de los cuales incluyen editores personalizados para varios tipos de propiedades.
  • La clase debe ser serializable. Esto permite que las aplicaciones y los marcos guarden, almacenen y restauren de forma confiable el estado del bean de una manera que sea independiente de la VM y la plataforma.

Debido a que estos requisitos se expresan en gran medida como convenciones en lugar de implementar interfaces, algunos desarrolladores ven JavaBeans como objetos Java antiguos y sencillos que siguen convenciones de denominación específicas.

POJO

Un objeto Java antiguo simple o POJO es un término introducido inicialmente para designar un objeto Java ligero y simple, que no implementa ninguna interfaz javax.ejb , a diferencia de EJB 2.x de peso pesado (especialmente los beans de entidad, los beans de sesión sin estado no son tan malos de la OMI) . Hoy en día, el término se utiliza para cualquier objeto simple sin cosas adicionales. Una vez más, Wikipedia hace un buen trabajo definiendo POJO :

POJO es un acrónimo de Plain Old Java Object. El nombre se usa para enfatizar que el objeto en cuestión es un objeto Java ordinario, no un objeto especial, y en particular no es un Enterprise JavaBean (especialmente antes de EJB 3). El término fue acuñado por Martin Fowler, Rebecca Parsons y Josh MacKenzie en septiembre de 2000:

"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 está muy bien".

El término continúa con el patrón de los términos más antiguos para tecnologías que no usan características nuevas y sofisticadas, como POTS (Plain Old Telephone Service) en telefonía, y PODS (estructuras de datos simples y llanas) que están definidas en C ++ pero que usan solo funciones en lenguaje C, y POD (Documentación antigua simple) en Perl.

Es muy probable que el término haya ganado una amplia aceptación debido a la necesidad de un término común y fácil de entender que contrasta con los marcos de objetos complicados. Un JavaBean es un POJO que se puede serializar, tiene un constructor sin argumentos y permite el acceso a las propiedades utilizando métodos de obtención y configuración. Un Enterprise JavaBean no es una clase única sino un modelo de componente completo (de nuevo, EJB 3 reduce la complejidad de Enterprise JavaBeans).

A medida que los diseños que usan POJO se han vuelto más comunes, han surgido sistemas que le dan a POJO algunas de las funcionalidades utilizadas en los marcos y más opciones sobre qué áreas de funcionalidad son realmente necesarias. Hibernate y Spring son ejemplos.

Objeto de valor

Un objeto de valor o VO es un objeto como java.lang.Integer que contiene valores (por lo tanto, objetos de valor). Para una definición más formal, a menudo me refiero a la descripción de Martin Fowler de Value Object :

En Patterns of Enterprise Application Architecture, describí el objeto de valor como un objeto pequeño, como un objeto de rango de fecha o dinero. Su propiedad clave es que siguen la semántica del valor en lugar de la semántica de referencia.

Por lo general, puede decirles que su noción de igualdad no se basa en la identidad, sino que dos objetos de valor son iguales si todos sus campos son iguales. Aunque todos los campos son iguales, no es necesario comparar todos los campos si un subconjunto es único; por ejemplo, los códigos de moneda para objetos de moneda son suficientes para probar la igualdad.

Una heurística general es que los objetos de valor deben ser completamente inmutables. Si desea cambiar un objeto de valor, debe reemplazar el objeto por uno nuevo y no se le permitirá actualizar los valores del objeto de valor en sí mismo: los objetos de valor actualizables causan problemas de aliasing.

La literatura J2EE anterior usó el término objeto de valor para describir una noción diferente, lo que llamo un objeto de transferencia de datos . Desde entonces, han cambiado su uso y en su lugar usan el término Transferir objeto .

Puede encontrar más material bueno sobre objetos de valor en la wiki y por Dirk Riehle .

Objeto de transferencia de datos

El objeto de transferencia de datos o DTO es un (anti) patrón introducido con EJB. En lugar de realizar muchas llamadas remotas en EJB, la idea era encapsular los datos en un objeto de valor que podría transferirse a través de la red: un objeto de transferencia de datos. Wikipedia tiene una definición decente de objeto de transferencia de datos :

El objeto de transferencia de datos (DTO), anteriormente conocido como objetos de valor o VO, es un patrón de diseño utilizado para transferir datos entre subsistemas de aplicaciones de software. Los DTO a menudo se usan junto con los objetos de acceso a datos para recuperar datos de una base de datos.

La diferencia entre los objetos de transferencia de datos y los objetos comerciales u objetos de acceso a datos es que un DTO no tiene ningún comportamiento, excepto el almacenamiento y la recuperación de sus propios datos (accesores y mutadores).

En una arquitectura EJB tradicional, los DTO sirven para propósitos dobles: primero, resuelven el problema de que los beans de entidad no son serializables; en segundo lugar, definen de manera implícita una fase de ensamblaje donde todos los datos que utilizará la vista se recuperan y se agrupan en los DTO antes de devolver el control al nivel de presentación.

Entonces, para muchas personas, los DTO y los VO son lo mismo (pero Fowler usa los VO para significar otra cosa como vimos). La mayoría de las veces, siguen las convenciones de JavaBeans y, por lo tanto, también son JavaBeans. Y todos son POJOs.

He visto algunas preguntas similares:

¿Podéis también decirme los contextos en que se utilizan? ¿O el propósito de ellos?


Básicamente,

DTO: "Los objetos de transferencia de datos" pueden viajar entre capas separadas en la arquitectura del software.

VO: "Objetos de valor" contienen un objeto como Integer, Money, etc.

POJO: Objeto Java antiguo simple que no es un objeto especial.

Java Beans: requiere que una Java Class sea ​​serializable, que tenga un constructor sin argumentos y que obtenga y establezca cada campo


Java Beans no son lo mismo que los EJBs.

La especificación de JavaBeans en Java 1.0 fue el intento de Sun de permitir que los objetos Java se manipulen en un IDE que se parece a VB. Se establecieron reglas para los objetos calificados como "Java Beans":

  1. Constructor predeterminado
  2. Getters y setters para miembros de datos privados que siguieron la convención de nomenclatura adecuada
  3. Serializable
  4. Tal vez otros que estoy olvidando.

Los EJB llegaron más tarde. Combinan componentes distribuidos y un modelo transaccional, que se ejecutan en un contenedor que administra subprocesos, agrupación, ciclo de vida y proporciona servicios. Están muy lejos de Java Beans.

Los DTO surgieron en el contexto de Java porque la gente descubrió que la especificación EJB 1.0 era demasiado "habladora" con la base de datos. En lugar de hacer un viaje de ida y vuelta para cada elemento de datos, las personas los empaquetan en Java Beans en forma masiva y los envían.

Los POJO fueron una reacción contra los EJB.


Primera charla sobre

Clase normal : eso significa que cualquier definición de clase que es normalmente en java significa que se crean diferentes tipos de propiedades de métodos, etc.
Bean: Bean no es nada, es solo un objeto de esa clase en particular; si usa este bean, puede acceder a su clase Java de la misma forma que el objeto. .

y después de eso hablamos del último POJO.

POJO - POJO es la clase que no tiene ningún servicio, tiene solo un constructor y propiedad privada predeterminados y esas propiedades para establecer un valor correspondiente de los métodos setter y getter. Es una forma corta de objeto Java simple.


DTO vs VO

DTO: los objetos de transferencia de datos son solo contenedores de datos que se utilizan para transportar datos entre capas y niveles.

  • Contiene principalmente atributos. Incluso puedes usar atributos públicos sin captadores y definidores.
  • Los objetos de transferencia de datos no contienen ninguna lógica de negocio.

Analogía:
Formulario de registro simple con atributos nombre de usuario, contraseña e identificación de correo electrónico.

  • Cuando este formulario se envíe en el archivo RegistrationServlet, obtendrá todos los atributos de la capa de visualización a la capa de negocios, donde pasará los atributos a los beans de Java y luego a la capa de persistencia o DAO.
  • DTO ayuda a transportar los atributos desde la capa de vista a la capa de negocios y, finalmente, a la capa de persistencia.

DTO se utilizó principalmente para obtener datos transportados a través de la red de manera eficiente, incluso puede ser desde JVM a otra JVM.

Los DTO a menudo son java.io.Serializable - para transferir datos a través de JVM.

VO: un objeto de valor [1] [2] representa a sí mismo un conjunto fijo de datos y es similar a una enumeración de Java. La identidad de un Objeto de Valor se basa en su estado más que en su identidad de objeto y es inmutable. Un ejemplo del mundo real sería Color.RED, Color.BLUE, SEX.FEMALE, etc.

POJO vs JavaBeans

[1] El Java-Beanness de un POJO es que todos sus atributos privados son accedidos a través de captadores y definidores públicos que cumplen con las convenciones de JavaBeans. p.ej

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

[2] JavaBeans debe implementar Serializable y tener un constructor sin argumentos, mientras que en POJO no tiene estas restricciones.


POJO : Es un archivo java (clase) que no extiende ni implementa ningún otro archivo java (clase).

Bean : es un archivo java (clase) en el que todas las variables son privadas, los métodos son públicos y se utilizan los getters y setters apropiados para acceder a las variables.

Clase normal : es un archivo java (clase) que puede consistir en variables públicas / privadas / predeterminadas / protegidas y que puede o no ampliar o implementar otro archivo java (clase).