example rest design-patterns architecture software-design

rest - example - ¿Qué son las capas DAO, DTO y Servicio en Spring Framework?



mapping dto to entity java (4)

DTO es la anotación @Entity en Sprin
DAO es la anotación @Repository en Spring (con Spring Boot JPA, solo necesita implementar la interfaz, ya que no necesita las anotaciones)
El servicio es la anotación @Service en Spring

Puedes leer más aquí: Acceso a datos con JPA

Estoy escribiendo servicios RESTful usando spring e hibernate. Leí muchos recursos en internet, pero no aclararon mis dudas. Explíqueme en detalle qué son las capas DAO , DTO y Servicio en el marco de Spring? Y por qué el uso de estas capas se requiere en primavera para desarrollar servicios de API RESTfull.


En primer lugar, estos conceptos son Platform Agnostic y no son exclusivos de Spring Framework o cualquier otro framework, para el caso.

Objeto de transferencia de datos

DTO es un objeto que transporta datos entre procesos. Cuando trabajas con una interfaz remota, cada llamada es costosa. Como resultado, necesita reducir el número de llamadas. La solución es crear un Data Transfer Object que pueda contener todos los datos para la llamada. Debe ser serializable para ir a través de la conexión. Por lo general, se usa un ensamblador en el lado del servidor para transferir datos entre el DTO y cualquier objeto de dominio. A menudo es poco más que un montón de campos y los que los consiguen y los que configuran para ellos.

Objeto de acceso a datos

Un Data Access Object abstrae y encapsula todo el acceso al origen de datos. El DAO gestiona la conexión con la fuente de datos para obtener y almacenar datos.

El DAO implementa el mecanismo de acceso requerido para trabajar con la fuente de datos. La fuente de datos podría ser un almacén persistente como un RDBMS o un servicio comercial al que se accede mediante REST o SOAP .

El DAO abstrae la implementación de acceso a datos subyacente para los objetos del Service para permitir el acceso transparente al origen de datos. El Service también delega la carga de datos y almacena las operaciones en el DAO .

Servicio

Service objetos de Service están haciendo el trabajo que la aplicación debe hacer para el dominio con el que está trabajando. Implica cálculos basados ​​en entradas y datos almacenados, la validación de cualquier información que provenga de la presentación y el cálculo exacto de la lógica de la fuente de datos a enviar, según los comandos recibidos de la presentación.

Una Service Layer define el límite de una aplicación y su conjunto de operaciones disponibles desde la perspectiva de la interconexión de las capas de cliente. Encapsula la lógica empresarial de la aplicación, controla las transacciones y coordina las respuestas en la implementación de sus operaciones.

Referencias Recomendadas

Martin Fowler tiene un gran libro sobre Patrones de Arquitectura de Aplicaciones comunes llamado Patrones de Arquitectura de Aplicaciones Empresariales . También hay, patrones de J2EE Core que vale la pena mirar.


La aplicación empresarial se divide en niveles para un fácil mantenimiento y desarrollo. Los niveles están dedicados a un tipo particular de tareas como

  • capa de presentación (UI)
  • Capa de negocios
  • Capa de acceso a datos (DAO, DTO)

Por qué este diseño: vamos a elegir un ejemplo: tiene una aplicación que lee datos de db y realiza una lógica de negocios en ella y luego la presenta al usuario. Ahora, si desea cambiar su base de datos, digamos que la aplicación anterior se estaba ejecutando en Oracle ahora quiere usar mysql, por lo que si no la desarrolla en niveles, hará cambios en todas partes de la aplicación. Pero si implementa DAO en la aplicación, esto se puede hacer fácilmente

DAO: el objeto de acceso a datos es un patrón de diseño, simplemente proporciona una interfaz para acceder a los datos a la capa de servicio y proporciona diferentes implementaciones para diferentes fuentes de datos (bases de datos, sistemas de archivos)

Código de ejemplo:

public interface DaoService { public boolean create(Object record); public CustomerTemp findTmp(String id); public Customer find(String id); public List getAllTmp(); public List getAll(); public boolean update(Object record); public boolean delete(Object record); public User getUser(String email); public boolean addUser(User user); }

Capa de servicio usando Dao

@Service("checkerService") public class CheckerServiceImpl implements CheckerService{ @Autowired @Qualifier("customerService") private DaoService daoService;

Ahora puedo proporcionar cualquier implementación de la interfaz DaoService. Servicio y DTO también se utilizan para la separación de las preocupaciones.


DAO - Objeto de acceso a datos :

Un objeto que proporciona una interfaz común para realizar todas las operaciones de base de datos como el mecanismo de persistencia.

public interface GenericDao<T> { public T find(Class<T> entityClass, Object id); public void save(T entity); public T update(T entity); public void delete(T entity); public List<T> findAll(Class<T> entityClass); }

Vea este ejemplo: Spring - DAO y Service layer

DTO - Objeto de transferencia de datos :

Un objeto que transporta datos entre procesos para reducir el número de llamadas a métodos significa que usted combina más de una entidad POJO en la capa de servicio.

Por ejemplo, una solicitud GET /rest/customer/101/orders es recuperar todos los pedidos para el ID del cliente 101 junto con los detalles del cliente, por lo tanto, debe combinar la entidad Customer y la entidad Orders con los detalles.