Pregunta

He visto algunas preguntas similares:

¿También pueden decirme los contextos en los que se utilizan? ¿O el propósito de ellos?

¿Fue útil?

Solución

JavaBeans

Un JavaBean es una clase que sigue a las convenciones de JavaBeans como lo define el sol. Wikipedia tiene un resumen bastante bueno de lo que JavaBeans son:

  

Los JavaBeans son componentes de software reutilizables para Java que se pueden manipular 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 se puede serializar, 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 el nombre, la construcción y el comportamiento de los métodos. 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 mediante los métodos get, set y otros (denominados métodos de acceso y métodos de mutación), 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 llanos que siguen convenciones de denominación específicas.

POJO

Un objeto Java antiguo sin formato o POJO es un término que se introdujo 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 Entity Beans , 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 al definir POJO :

  

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

     
    

" Nos preguntamos por qué las personas estaban tan en contra de usar objetos regulares en sus     sistemas y concluyó que era     Porque los objetos simples carecían de una fantasía.     nombre. Así que les dimos una, y es     atrapado muy bien. "

  
     

El término continúa el patrón de   términos más antiguos para las tecnologías que hacen   No usar nuevas funciones de lujo, como   POTS (Plain Old Telephone Service) en   telefonía, y PODS (datos antiguos)   Estructuras) que se definen en C ++   pero usa solo las funciones del lenguaje C, y   POD (Documentación antigua simple) en Perl.

     

El término probablemente ha ganado   aceptación generalizada debido a la   Necesidad de un común y fácil.   término entendido que contrasta con   Marcos de objetos complicados. UNA   JavaBean es un POJO que es   serializable, tiene un no-argumento   constructor, y permite el acceso a   propiedades usando getter y setter   metodos Un Enterprise JavaBean no es   una sola clase pero un componente completo   modelo (de nuevo, EJB 3 reduce la   complejidad de Enterprise JavaBeans).

     

Como los diseños que utilizan POJOs se han convertido   más comúnmente utilizados, los sistemas tienen   surgido que le dan a POJOs algunas de las   Funcionalidad utilizada en marcos y   más opciones sobre qué áreas de   La funcionalidad es realmente necesaria.   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 Objeto de valor :

  

En Patterns of Enterprise Application Architecture, describí el Objeto de valor como un objeto pequeño, como un objeto de rango de fechas 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 alias.

     

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 utilizan el término Transferir objeto en su lugar.

     

Puede encontrar más material bueno sobre objetos de valor en el 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 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 VO son lo mismo (pero Fowler usa 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.

Otros consejos

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 empresarial.
  

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

     
      
  • Cuando este formulario se envíe en el archivo RegistrationServlet, obtendrá todos los atributos desde la capa de vista a la capa de negocios donde pase   los atributos a los beans de java y luego a la capa de persistencia o DAO.
  •   
  • Las DTO ayudan a transportar los atributos desde la capa de vista a la capa de negocios y, finalmente, a la capa de persistencia.
  •   

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

Los

DTO suelen ser 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 configuradores públicos que se ajustan a las convenciones de JavaBeans. por ejemplo

    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.

Básicamente,

DTO: " Objetos de transferencia de datos " puede viajar entre capas separadas en la arquitectura del software.

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

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

Java Beans: requiere que un Java Class sea serializable, tenga un no-arg y un getter y setter para cada campo

Los Beans Java no son lo mismo que los EJBs.

La especificación de JavaBeans en Java 1.0 fue de Sun intente 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. Captadores y definidores para miembros de datos privados que siguieron la convención de nomenclatura adecuada
  3. Serializable
  4. Tal vez otros que estoy olvidando.

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

Las DTO surgieron en el contexto de Java porque la gente descubrió que la especificación EJB 1.0 también era " hablador " 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 a todos.

Los POJO fueron una reacción contra los EJB.

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 métodos de obtención y configuración 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 extender o implementar otro archivo java (clase).

First Talk About

Clase normal - significa que cualquier definición de clase que es normalmente en java significa que creas diferentes tipos de propiedades de método etc.
Bean - Bean no es nada, es solo un objeto de esa clase en particular. Al usar este bean, puede acceder a su clase de Java del mismo modo que .

y después de eso hablamos del último POJO

POJO - POJO es esa clase que no tiene ningún servicio, tiene solo un constructor predeterminado y propiedad privada y esas propiedades para establecer un valor de métodos de establecimiento y obtención correspondientes. Es una forma corta de objeto Java simple.

  • Objeto de valor : se utiliza cuando se necesita medir la igualdad de los objetos en función del valor de los objetos.
  • Objeto de transferencia de datos : pase datos con múltiples atributos en una sola toma del cliente al servidor a través de la capa, para evitar múltiples llamadas al servidor remoto.
  • Plain Old Java Object : es como una clase simple de propiedades, constructor público sin argumentos. Como declaramos para la entidad JPA.

diferencia-entre-valor-objeto-patrón-y-datos-transferencia-patrón

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top