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.
相关问题
- Design RESTful service with multiple ids
- Axios OPTIONS instead of POST Request. Express Res
- Plain (non-HTML) error pages in REST api
- Laravel 5.1 MethodNotAllowedHttpException on store
- Name for a method that has only side effects
相关文章
- Got ActiveRecord::AssociationTypeMismatch on model
- Multiple parameters in AngularJS $resource GET
- Global Exception Handling in Jersey & Spring?
- REST search interface and the idempotency of GET
- Getting error detail from WCF REST
- Send a GET request with a body in JavaScript (XMLH
- GuzzleHttp Hangs When Using Localhost
- JAX-RS (Jersey) ExceptionMapper - @Context injecti
DAO - Data Access Object:
An object that provides a common interface to perform all database operations like persistence mechanism.
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 id101
along with customer details hence you need combine entityCustomer
and entityOrders
with details.DTO is the
@Entity
annotation in SprinDAO is the
@Repository
annotation in Spring (With Spring Boot JPA you just need to implement the interface now you don't need the annotations)Service is the
@Service
annotation in SpringYou can read more here: Accessing Data with JPA
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 it is expensive. As a result you need to reduce the number of calls. The solution is to create aData 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 theDTO
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. TheDAO
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 viaREST
orSOAP
.The
DAO
abstracts the underlying data access implementation for theService
objects to enable transparent access to the data source. TheService
also delegates data load and store operations to theDAO
.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.
Enterprise application is divided into tiers for easy maintenance and development. Tiers are dedicated to particular type of tasks like
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:
Service layer using Dao
Now i can provide any implementation of DaoService interface. Service and DTO are also used for separation of concerns.