Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest Spring框架中的DAO、DTO和服务层是什么?_Rest_Design Patterns_Architecture_Software Design - Fatal编程技术网

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

Rest Spring框架中的DAO、DTO和服务层是什么?,rest,design-patterns,architecture,software-design,Rest,Design Patterns,Architecture,Software Design,我正在使用spring和hibernate编写RESTful服务。我在网上读了很多资料,但他们并没有澄清我的疑问。请详细解释一下spring框架中的DAO、DTO和服务层是什么?以及为什么在spring中需要使用这些层来开发RESTfull API服务。企业应用程序被划分为多个层,以便于维护和开发。层专用于特定类型的任务,如 表示层(UI) 业务层 数据访问层(DAO、DTO) 为什么采用这种设计: 让我们举一个例子,您有一个应用程序,它从数据库中读取数据并对其执行一些业务逻辑,然后将其呈现

我正在使用spring和hibernate编写RESTful服务。我在网上读了很多资料,但他们并没有澄清我的疑问。请详细解释一下spring框架中的DAO、DTO和服务层是什么?以及为什么在spring中需要使用这些层来开发RESTfull API服务。

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

  • 表示层(UI)
  • 业务层
  • 数据访问层(DAO、DTO)
为什么采用这种设计: 让我们举一个例子,您有一个应用程序,它从数据库中读取数据并对其执行一些业务逻辑,然后将其呈现给用户。现在,如果您想更改数据库,假设之前的应用程序在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);
}
使用Dao的服务层

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

@Autowired
@Qualifier("customerService")
private DaoService daoService;
现在我可以提供DaoService接口的任何实现。
服务和DTO还用于分离关注点

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


数据传输对象
DTO
是在进程之间传输数据的对象。当您使用远程接口时,每次调用都很昂贵。因此,您需要减少通话次数。解决方案是创建一个
数据传输对象
,该对象可以保存呼叫的所有数据。它需要可序列化才能通过连接。通常在服务器端使用汇编程序在
DTO
和任何域对象之间传输数据。它通常很小 不仅仅是一堆字段和它们的getter和setter


数据存取目标
数据访问对象
抽象并封装对数据的所有访问 数据源。
DAO
管理与数据源的连接,以 获取并存储数据

DAO实现处理数据源所需的访问机制。 数据源可以是像
RDBMS
这样的持久存储,也可以是通过
REST
SOAP
访问的业务服务

DAO
服务
对象的底层数据访问实现抽象为 启用对数据源的透明访问。
服务也会委派
将数据加载并存储操作到
DAO


服务
服务
对象正在执行 应用程序需要为您正在使用的域执行以下操作。它涉及基于输入和输出的计算 存储的数据,对演示文稿中的任何数据进行验证,并计算出确切的数据 要分派的源逻辑,取决于从演示文稿接收的命令

服务层
定义应用程序的边界及其从 接口客户端层的透视图。它封装了应用程序的业务逻辑,控制 交易和协调其运营实施过程中的响应


推荐参考文献 MartinFowler有一本关于通用应用程序体系结构模式的好书,名为。还有,值得一看。

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

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);
}
公共接口GenericDao{
public T find(类entityClass,对象id);
公共无效保存(T实体);
公共T更新(T实体);
公共无效删除(T实体);
公共列表findAll(类entityClass);
}
请参见此示例:

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


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

DTO是Spring中的
@entity
注释
DAO是Spring中的
@Repository
注释(使用Spring Boot JPA,您现在只需要实现接口,而不需要注释)
服务是春天的
@Service
注释


您可以在此处阅读更多信息:

服务层:

它从控制器层接收请求,并将请求处理到持久性层

  • @控制器:它是初始化整个控制器层的注释
  • @服务:它是初始化整个服务层的注释
  • @Repository:它是初始化整个持久性层的注释
DTO:

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

DAO:


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

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

在春天,DTO可以是一种形式