Spring Framework中的DAO,DTO和Service层是什么?

Pra*_*ath 41 architecture rest design-patterns software-design

我正在使用spring和hibernate编写RESTful服务.我在互联网上阅读了很多资源,但他们没有澄清我的疑虑.请详细解释一下spring框架中的DAO,DTOService层是什么?为什么在Spring中需要使用这些层来开发RESTfull API服务.

Ali*_*ani 57

首先,这些概念是平台不可知的,并不是Spring Framework或任何其他框架所独有的.


数据传输对象

DTO是一个在进程之间传递数据的对象.当您使用远程接口时,每次调用都很昂贵.因此,您需要减少呼叫次数.解决方案是创建一个Data Transfer Object可以保存呼叫所有数据的解决方案.它需要可序列化才能跨越连接.通常,在服务器端使用汇编程序在DTO域对象和任何域对象之间传输数据.它通常只是一堆字段,以及它们的吸气剂和制定者.


数据访问对象

一个Data Access Object抽象和封装了所有访问数据源.的DAO管理与数据源,以获得和存储数据的连接.

DAO实现了使用数据源所需的访问机制.数据源可以是持久性存储RDBMS,也可以是通过REST或访问的业务服务SOAP.

DAO摘要的基础数据访问实现Service 对象以使得对数据源的透明访问.它Service还将数据加载和存储操作委托给DAO.


服务

Service对象正在执行应用程序需要为您正在使用的域执行的工作.它涉及基于输入和存储数据的计算,对来自演示文稿的任何数据的验证,以及根据从演示文稿接收的命令确切地确定要分派的数据源逻辑.

A Service Layer从连接客户端层的角度定义应用程序的边界及其可用操作集.它封装了应用程序的业务逻辑,控制事务并协调其操作实现中的响应.


推荐参考文献

Martin Fowler有一本关于常见的应用程序架构模式的书,名为Patterns of Enterprise Application Architecture.还有一些值得关注的核心J2EE模式.


Gaj*_*mar 10

企业应用程序被划分为易于维护和开发的层。层专用于特定类型的任务,例如

  • 表示层(UI)
  • 业务层
  • 数据访问层(DAO、DTO)

为什么这样设计:让我们选择一个示例,您有一个应用程序,它从数据库读取数据并对其执行一些业务逻辑,然后将其呈现给用户。现在,如果你想改变你的数据库,假设早期的应用程序在 Oracle 上运行,现在你想使用 mysql,所以如果你不分层开发它,你将在应用程序的任何地方进行更改。但是如果你在应用程序中实现 DAO 那么这可以很容易地完成

DAO:Data Access Object 是一种设计模式,只是为服务层提供访问数据的接口,并为不同的数据源(数据库、文件系统)提供不同的实现

示例代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

使用 Dao 的服务层

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

@Autowired
@Qualifier("customerService")
private DaoService daoService;
Run Code Online (Sandbox Code Playgroud)

现在我可以提供 DaoService 接口的任何实现。服务和 DTO 也用于关注点分离。


vel*_*s4j 7

DAO-数据访问对象

提供通用接口以执行所有数据库操作(如持久性机制)的对象。

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);
}
Run Code Online (Sandbox Code Playgroud)

参见以下示例:Spring – DAO和Service层

DTO-数据传输对象

一个在进程之间携带数据以减少方法调用数量的对象意味着您在服务层中组合了多个POJO实体。

例如,GET请求/rest/customer/101/orders将检索所有101带有客户ID的订单以及客户详细信息,因此您需要将实体CustomerOrders具有详细信息的实体结合起来。