Pregunta

Un mentor yo respeto sugiere que una simple bean es una pérdida de tiempo - que objetos de valor "DEBE" contener algunos de lógica de negocios para ser útil.

Otro dice que el codigo es difícil de mantener y que toda la lógica de negocio debe ser exteriorizado.

Me doy cuenta de que esta pregunta es subjetiva.Preguntar de todos modos - ¿quieres saber las respuestas de más perspectivas.

¿Fue útil?

Solución

Lo mejor será llamar a ellos Objetos De Transferencia De o Objetos de transferencia de datos (DTO).

A principios de este mismo j2ee patrón que se denomina "objeto de Valor", pero se cambió el nombre porque fue confundido con este

http://dddcommunity.org/discussion/messageboardarchive/ValueObjects.html

Para responder a su pregunta, sólo quiero poner un mínimo de lógica para mi Dto, en la lógica de que es necesario para la visualización de razones.

Mejor aún, si estamos hablando de una base de datos de la aplicación web, me gustaría ir más allá del core j2ee y patrones de uso Hibernate o el La API de Persistencia Java para crear un modelo de dominio que soporta la carga diferida de las relaciones y el uso de esta en la vista.

Ver el Sesión abierta en la vista.

De esta manera, usted no tiene que programar un conjunto de DTOs y tiene toda la lógica del negocio disponible para utilizar en sus puntos de vista/controladores etc.

Otros consejos

La idea de poner los datos y la lógica de negocio es promover la encapsulación, y para exponer tan poco estado interno como sea posible a otros objetos.De esa manera, los clientes pueden confiar en una interfaz más que en una aplicación.Ver el "Digo, no preguntes" el principio y el La ley de Demeter.La encapsulación hace que sea más fácil de entender los estados de datos puede estar en, más fáciles de leer el código, más fáciles de separar las clases y generalmente más fáciles de la prueba de unidad.

La externalización de la lógica de negocio (por lo general en forma de "Servicio" o "Administrador" clases) hace preguntas como "¿dónde se usan estos datos?" y "¿Qué estados puede ser?", mucho más difícil de responder.Es también un procedimiento forma de pensar, envuelto en un objeto.Esto puede conducir a un anémico modelo de dominio.

Los problemas de conducta externalizados no siempre es malo.Por ejemplo, un capa de servicio puede organizar los objetos de dominio, pero sin tomar el control de su estado-la manipulación de responsabilidades.O, cuando lo son en su mayoría haciendo lecturas/escrituras a una DB que mapa muy bien a los formularios de entrada, tal vez usted no necesita un modelo de dominio - o la dolorosa mapeo objeto/relacional sobrecarga que implica en absoluto.

La transferencia de Objetos, a menudo, sirven para separar capas arquitectónicas de uno a otro (o de un sistema externo) al proporcionar el mínimo de información de estado de la llamada capa de necesidades, sin exponer ninguna lógica de negocio.

Esto puede ser útil cuando, por ejemplo, la preparación de información para la vista:acaba de dar la vista de la información que necesita, y nada más, por lo que puede concentrarse en ¿ para mostrar la información, en lugar de ¿ la información a mostrar.Por ejemplo, la QUE podría ser una agregación de varias fuentes de datos.

Una de las ventajas es que sus puntos de vista y su dominio de los objetos se separan.Con su dominio de los objetos en Jsp puede hacer que su dominio más difícil para refactorizar y promueve el uso indiscriminado de getters y setters (de ahí rompiendo la encapsulación).

Sin embargo, también hay una sobrecarga asociada con el hecho de tener una gran cantidad de Objetos de Transferencia y a menudo una gran cantidad de duplicación, también.Algunos proyectos en los que he estado en la final A la que, básicamente, el espejo de otros objetos del dominio (que considero un anti-patrón).

Depende.

uy, acabo de dejar escapar un cliché?

La cuestión básica para el diseño de un objeto es:va a la lógica que rige los datos del objeto se diferentes o el mismo cuando se utiliza/consumidos por otros objetos?

Si las diferentes áreas de uso de la convocatoria de una lógica diferente, la exteriorización de ella.Si es el mismo no importa donde el objeto viaja a su lugar junto con la clase.

Mi preferencia personal es poner toda la lógica del negocio en el modelo del dominio, que es en el "verdadero" objetos de dominio.Así que cuando la Transferencia de Datos se crean Objetos que son en su mayoría sólo una (inmutable) de la representación del estado de los objetos de dominio y, por tanto, no contienen la lógica de negocio.Pueden contener métodos para la clonación y la comparación, sin embargo, pero la carne de la lógica de negocio de código permanece en el dominio de los objetos.

Lo Korros dijo.

Objeto de valor := Un pequeño objeto simple, como el dinero o un rango de fecha, cuya igualdad no se basa en la identidad.

DTO := Un objeto que transporta datos entre los procesos con el fin de reducir el número de llamadas a métodos.

Estos son los defintions propuesto por Martin Fowler y me gustaría popularizar.

Estoy de acuerdo con Panagiotis:la sesión abierta en la vista patrón es mucho mejor que el uso de DTOs.Puesto de otra manera, me he encontrado con que una aplicación es mucho más simple si el tráfico en su dominio de los objetos(o algunos compuestos de los mismos) de la capa de la vista todo el camino hacia abajo.

Dicho esto, es difícil de lograr, debido a que usted necesita para hacer su HttpSession coincidente con su capa de persistencia de la unidad de trabajo.Entonces usted tendrá que asegurarse de que todas las modificaciones de base de datos (es decir,crear, actualizaciones y eliminaciones) son intencionales.En otras palabras, usted no quiere ser el caso de que la capa de la vista tiene un objeto de dominio, un campo es modificado y la modificación obtiene persistió sin el código de la aplicación intencionalmente guardar los cambios.Otro problema que es importante es asegurarse de que su semántica transaccional son satisfactorios.Generalmente la captura y modificación de un objeto de dominio tendrá lugar en un contexto transaccional y no es difícil de hacer de su capa ORM requieren de una nueva transacción.¿ es difícil es es una transacción anidada, en la que desea incluir un segundo contexto transaccional dentro de la primera se abrió.

Si no te importa investigar cómo no-API de Java se encarga de estos problemas, que vale la pena mirar Rails' Registro Activo, que permite Ruby servidor de páginas para trabajar directamente con el modelo de dominio y recorrer sus asociaciones.

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