Spring 框架中的 DAO、 DTO 和服务层是什么?

我正在使用 spring 和 hibernate 编写 RESTful 服务。我在网上看了很多资料,但是他们没有澄清我的疑问。请详细解释什么是 DAODTO服务层在弹簧框架?以及为什么在春季需要使用这些层来开发 RESTfulAPI 服务。

108657 次浏览

为了便于维护和开发,企业应用程序被划分为多个层次

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

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

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

示例代码:

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("checkerService")
public class CheckerServiceImpl implements CheckerService{


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

现在,我可以提供任何实现的道服务接口。 此外,电讯管理局亦会使用服务及电讯关注点分离。

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


数据传输对象

DTO是一个在进程之间传输数据的对象。当您使用远程接口时,每次调用都很昂贵。因此,您需要减少调用的数量。解决方案是创建一个 Data Transfer Object,它可以保存调用的所有数据。它必须是 可连载的才能通过连接。通常在服务器端使用汇编程序在 DTO和任何域对象之间传输数据。通常很少 不只是一堆字段和它们的读取器和设置器。


数据访问对象

Data Access Object抽象并封装对 DAO管理与数据源的连接以 获取和存储数据。

DAO 实现处理数据源所需的访问机制。 数据源可以是一个持久存储,如 RDBMS,也可以是通过 RESTSOAP访问的业务服务。

DAOService对象的底层数据访问实现抽象为 启用对数据源的透明访问 数据加载和存储操作到 DAO


服务

Service对象正在执行 应用程序需要做的领域,你的工作。它涉及的计算基础上的输入和 存储数据,验证演示文稿中的任何数据,并确切指出哪些数据 根据从表示中接收到的命令,调度源逻辑。

Service Layer定义应用程序的边界及其从 它封装了应用程序的业务逻辑,控制 交易和协调执行其业务的反应。


推荐参考文献

马丁 · 福勒有一本关于常见 应用程序体系结构模式的好书,名叫 企业应用体系结构模式。还有一本,核心 J2EE 模式,值得一看。

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

看这个例子: Spring-DAO 和服务层

DTO-数据传输对象 :

为了减少方法调用的数量,在进程之间传输数据的对象意味着在服务层中组合多个 POJO 实体。

例如,GET 请求 /rest/customer/101/orders检索客户 id 101的所有订单以及客户详细信息,因此需要将实体 Customer和实体 Orders与详细信息结合起来。

服务层:

它接收来自控制器层的请求,并将请求处理到持久层

  • @ Controller: 这是初始化整个控制器层的注释。
  • @ Service: 这是初始化整个服务层的注释。
  • @ Repository: 它是初始化整个持久层的注释。

外交部发言人:

它是一个数据传输对象,用于将属性从服务层传递到持久层。

道:

它是一个数据访问对象。它也被称为持久层。在这个 DAO 中,我们从 DTO 对象的服务层接收属性值。这里我们为 db 编写一个持久性逻辑。

DTO: 在不同进程之间或同一进程内传递的数据对象。它可以是实际实体对象的包装器。像使用 DTO 那样使用实体对象是不安全的,也不建议这样做。该对象的设计基于表示的简单性、 ID 公开的安全性、用户需求等多种因素。

在 Spring 中,DTO 可以用一个简单的 model/pojo 对象形成。

DAO: 负责 CRUD 操作的对象。

在 Spring 中,这可以是一个实现 JPARepository 接口的对象,也可以是任何连接到数据库并为我们执行 CRUD 的 bean。请记住您从 JDBC 到 Hibernate 再到 Spring 数据 JPA 的旅程。:)

服务: 业务逻辑实现的核心 bean。此对象可以将 DAO 对象作为其依赖项。针对特定用例的核心业务逻辑将放在这里。

在 Spring 中,可以通过使用@Service 或@Component 注释来创建服务对象/bean,也可以使用 java 配置将对象表示为 bean。确保将所有必需的依赖项注入到服务 bean 中,以完成其繁重的提升工作。