What are the DAO, DTO and Service layers in Spring Framework?
Asked Answered
S

5

82

I am writing RESTful services using spring and hibernate. I read many resource in internet, but they did not clarify my doubts. Please explain me in details what are DAO, DTO and Service layers in spring framework? And why usage of these layers is required in spring to develop RESTfull API services.

Stinkpot answered 29/1, 2016 at 6:41 Comment(0)
D
108

First off, these concepts are Platform Agnostic and are not exclusive to Spring Framework or any other framework, for that matter.


Data Transfer Object

DTO is an object that carries data between processes. When you're working with a remote interface, each call to it is expensive. As a result you need to reduce the number of calls. The solution is to create a Data Transfer Object that can hold all the data for the call. It needs to be serializable to go across the connection. Usually an assembler is used on the server side to transfer data between the DTO and any domain objects. It's often little more than a bunch of fields and the getters and setters for them.


Data Access Object

A Data Access Object abstracts and encapsulates all access to the data source. The DAO manages the connection with the data source to obtain and store data.

The DAO implements the access mechanism required to work with the data source. The data source could be a persistent store like an RDBMS, or a business service accessed via REST or SOAP.

The DAO abstracts the underlying data access implementation for the Service objects to enable transparent access to the data source. The Service also delegates data load and store operations to the DAO.


Service

Service objects are doing the work that the application needs to do for the domain you're working with. It involves calculations based on inputs and stored data, validation of any data that comes in from the presentation, and figuring out exactly what data source logic to dispatch, depending on commands received from the presentation.

A Service Layer defines an application's boundary and its set of available operations from the perspective of interfacing client layers. It encapsulates the application's business logic, controlling transactions and coordinating responses in the implementation of its operations.


Recommended References

Martin Fowler has a great book on common Application Architecture Patterns named Patterns of Enterprise Application Architecture. There is also, Core J2EE Patterns that worth looking at.

Drama answered 29/1, 2016 at 7:47 Comment(2)
Why should I need a DAO when I have an ORM? The referenced book is pretty much pre-ORM era ish. When I'm using web-services I structure them differently anyways and when I want to switch databases, that's what the ORM is for.Eudoxia
orm don't support all specific feature of databaseHeadforemost
W
24

DAO - Data Access Object:

An object that provides a common interface to perform all database operations like persistence mechanism.

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);
}

See this example : Spring – DAO and Service layer

DTO - Data Transfer Object:

An object that carries data between processes in order to reduce the number of method calls means you combine more than one POJO entities in service layer.

For example a GET request /rest/customer/101/orders is to retrieve all the orders for customer id 101 along with customer details hence you need combine entity Customer and entity Orders with details.

Westering answered 29/1, 2016 at 8:23 Comment(1)
Here is one more example howtodoinjava.com/spring/spring-orm/…Westering
M
11

Enterprise application is divided into tiers for easy maintenance and development. Tiers are dedicated to particular type of tasks like

  • presentation layer (UI)
  • Business layer
  • Data access layer (DAO, DTO)

Why this design: Let's pick an example you have an application which reads data from db and performs some business logic on it then present it to user. Now if you want to change your DB let say earlier application was running on Oracle now you want to use mysql so if you don't develop it in tiers you will doing changes everywhere in application. But if you implement DAO in application then this can be done easily

DAO: Data Access Object is design pattern just provide an interface for accessing data to service layer and provide different implementations for different data sources (Databases, File systems)

Example code:

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);
}

Service layer using Dao

@Service("checkerService")
public class CheckerServiceImpl implements CheckerService{

@Autowired
@Qualifier("customerService")
private DaoService daoService;

Now i can provide any implementation of DaoService interface. Service and DTO are also used for separation of concerns.

Massimo answered 29/1, 2016 at 7:27 Comment(1)
The only case you want to use DTO at DAO layer is when is in a isolated DAL service and you need a specific interface API to use to connect to.Bamberger
H
4

DTO: The data object that we pass between different processes or within the same process. It can be a wrapper around the actual entity object. Using entity object as is for DTO is not safe and not recommended. Design of this object is based on various factors like simplicity of representation, security of exposing Ids, consumer requirement and so on.

In Spring, DTO can be formed with a simple model/pojo object.

DAO: The object responsible for CRUD operations.

In Spring, this can be an object that implements JPARepository interface, or any bean that connects with database and does a CRUD for us. Please remember your journey from JDBC to Hibernate to Spring data JPA. :)

Service: Core bean for business logic implementation. This object may has DAO object as its dependency. Core business logic for the particular use case will go here.

In Spring, Service object/bean can be created either by annotating the bean with @Service or @Component annotation or simply representing the object as a bean using java configuration. Make sure you inject all the required dependencies into the service bean for its heavy lifting job.

Housel answered 16/2, 2021 at 23:8 Comment(0)
P
-3

SERVICE LAYER:

It receives the request from controller layer and process the request to Persistence layer

  • @Controller:It is the annotation which initialize whole controller layer.
  • @Service:It is the annotation which initialize whole service layer.
  • @Repository: It is the annotation which initialize whole persistence layer.

DTO:

It is an Data Transfer object which used to pass the properties from service layer to persistence layer.

DAO:

It is an Data Access object. it is also known as persistence layer. In this DAO we receive property values from service layer in DTO object. Here we write an persistence logic to db.

Produce answered 2/5, 2019 at 10:14 Comment(1)
DTO: It is an Data Transfer object indeed, but is used to communicate between two isolated services and not between controller and service layers. Usually used for REST API controllers used from a UI Client Application.Bamberger

© 2022 - 2024 — McMap. All rights reserved.