2012-05-01 15 views
5

¿Los objetos de dominio son los mismos que las entidades JPA? Si tengo un objeto de valor (por ejemplo, un billete de un dólar), ¿cómo puedo (o incluso debería) almacenarlo en el almacén de datos como un objeto de referencia?¿Los objetos de dominio son lo mismo que las entidades JPA?

¿Cuáles son las sutilezas de los objetos de dominio que son entidades en algunos casos y objetos de valor en otros casos? ¿Alguien podría dirigirme a un buen artículo sobre esto?

+0

Sí, los objetos de dominio son lo mismo que las entidades JPA – James

+0

No lo son si se encuentra en un entorno de Diseño controlado por el dominio, ya que los objetos de dominio tienden a ser más robustos en lugar de objetos "anémicos". Compruebe http://stackoverflow.com/questions/5589141/understanding-domain-objects-services –

+2

¿Qué le impide poner lógica de dominio en una entidad? ¿No es ese el objetivo de mapear filas de tablas a objetos reales en primer lugar? De lo contrario, también puede utilizar HashMaps para representar los datos de una fila en la tabla. – wrschneider

Respuesta

5

"objeto de dominio" es un término más conceptual; "Entidad JPA" se refiere a una tecnología específica útil para implementar objetos de dominio.

En general, los objetos de dominio corresponden a los nombres (pedidos, facturas, clientes, etc.) de su dominio. Por lo general, vemos que están más cerca de la base de datos que los objetos puros de transferencia de datos. Por lo tanto, es posible que vea anotaciones ORM en las clases que usa para implementar sus objetos de dominio, por ejemplo.

Mucha gente implementa objetos de dominio de forma anémica, en su mayoría propiedades con correlaciones de ORM, pero sin una lógica real en los propios objetos de dominio. Ponen la lógica en los servicios de dominio.

Por otro lado, los proponentes del diseño impulsado por dominio ponen la lógica en los objetos del dominio.

De cualquier forma estos son los objetos de dominio en su sistema.

Las entidades JPA son clases que anota con @Entity, @Column, @ManyToOne, etc. Esta es una forma de implementar objetos de dominio. Puede decidir poner la lógica de dominio en los objetos, como se indicó anteriormente.

0

En el contexto de Domain Driven Design, no son lo mismo. Un objeto de dominio puede ser un agregado que contiene entidades y objetos de valor y debe ignorar la persistencia. Por lo tanto, no debe contener ninguna anotación JPA.

0

No, los objetos de dominio son objetos con un comportamiento rico que representa un concepto relevante del negocio. Las entidades JPA son una solución técnica para la persistencia.

0

¿Los objetos de dominio son los mismos que las entidades JPA?

No, no lo son.

Si tengo un objeto de valor (por ejemplo, un billete de un dólar), ¿cómo puedo (o incluso debo) almacenarlo en el almacén de datos como un objeto de referencia?

Recomiendo almacenar objetos de valor utilizando @Embeddable. VO no necesita @Id, solo debe hacer referencia a ellos desde el padre (se almacenan en la misma TABLA que el padre). En caso de cobros, use @ElementCollection.

@Emedded objetos de valor tiene un mejor rendimiento en Hibernate:

  • no tiene UNE si no está utilizando @OneToOne.
  • Value Las colecciones de objetos se pueden eliminar con un DELETE y no tienen que cargarse antes de la eliminación.

¿Cuáles son las sutilezas de los objetos de dominio que son entidades en algunos casos y objetos de valor en otros casos?

Las entidades son objetos que se distinguen por @Id, en contrario los objetos de valor se distinguen por valores. Los Objetos de valor a menudo se implementan como inmutables, mientras que los objetos de dominio/dominio contienen una lógica de negocio que muta su estado.

En algunos casos comerciales necesita la representación del objeto de dominio como objeto de valor, también conocido como instantánea, que por ejemplo pasa a otro agregado o publica dentro de evento de dominio.

¿Alguien podría dirigirme a un buen artículo sobre esto?

Libro: Implementing Domain-Driven Design, Vaughn Vernon.

Cuestiones relacionadas