Diferencia entre DTO y BO

Buenas tardes amigos, junto con saludarles me gustaría por favor aclarar una duda que no he podido resolver...

Entiendo que un DTO se utiliza para transferir datos como objetos, pero este tipo de clases no debe llevar lógica para respetar su principal caracteristica o función.

La duda la tengo con los BO..
le comento el caso puntual...
Tengo que procesar información de varias tablas a la vez y devolver a la vista los datos (un método por ejemplo "Facturación empresa").
Como los datos a procesar pertenecen a varias tablas o entidades, utilizo DTO's para recibir la información de ellas a través de los DAOS de cada tabla.

Así que en la capa de negocio donde junto todos los DTO's recibidos desde los DAOS correspondientes, cree atributos que representarían una nueva entidad que contiene todos los datos que devuelve esa transacción en particular (FacturacionEmpresaBO).
A esto le llame BO y a mi parecer seria como una especie de DTO pero con algo de lógica aplicada para llenar los atributos y facilitar la entrega de datos de ciertas operaciones.

En resumen.. por cada transacción compleja que tenga que hacer, creo una clase BO con sus propios atributos que se llenarían con datos obtenidos desde diferentes DTO's obtenidos de diversos DAOS que hacen referencia a varias tablas del sistema. De esta forma y con este nuevo Objeto de Negocio puedo transportar y entregar al controlador o vista la información mas eficientemente...

Ojala me pudieran aclarar esta duda, ya que he buscado información al respecto y se manejan muchos conceptos distintos con respecto al tema.

Muchas gracias por su tiempo...
Saludos!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Nopalin

Al final de cuentas, si te

Al final de cuentas, si te funciona puedes dejarlo así, lo otro no son mas que convenciones para que tu código pueda ser entendido por otros programadores. Ahora no creo que alguien use al 100% todas las convenciones, siempre hay algo que haces por fuera de ellas por que te hace la vida mas simple. En tu caso particular según entiendo estas llamando DTOs a los objetos que usas para representar la información de la base de datos y cuando el cliente necesita información de varios DTOs creas lo que llamas BO. Bueno aqui tienes algo confundido los conceptos, el objeto que representa una tabla es una entidad y un DTO es un objeto cualquier sin lógica que se use para transferir información de tu servidor al cliente. Se hace así por que las entidades tienen funciones por debajo del agua que no vez, como por ejemplo si tienes una propiedad ligada a otra entidad, o a una lista el subsistema hace las llamadas a la base de datos para traerte esa info y tu la uses como propiedades de la entidad, cosa que no podrias hacer en el cliente si llegas a enviar la entidad al cliente, por eso se crearon los DTOs, para ser transporte de información plana.

Ahora en tu caso necesitas un objeto que trae información de 3 entidades diferentes solo creas un nuevo DTO que le llames FacturacionEmpresaDto y ahi pones todas las propiedades que ocupes, en tu método de tu BO, vas a traer los dto's de tus daos, ahi en ese mismo metodo procesas esas tres listas de dto para crear una lista de tu nuevo dto que sea el que regresas al cliente. Un dto no debe tener lógica de negocio.

Saludos

Imagen de beto.bateria

pojos, dto, bo

PARA MI es lo mismo un pojo, dto, o bo, solo guardan datos de las entidades relacionadas y es que leo las definiciones y describen lo mismo con diferentes palabras.

En estos momentos estoy pensando quitar esa capa, o ese grupo de clases, como que me quita mucho tiempo crearlas, y obvio el servidor consume muchos recursos para manejarlos ¿tal vez manejarlos con un encapsulamiento de json(gson, jackson u otro)?