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.