Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
Java DAO设计模式与servlet_Java_Jsp_Design Patterns_Servlets_Dao - Fatal编程技术网

Java DAO设计模式与servlet

Java DAO设计模式与servlet,java,jsp,design-patterns,servlets,dao,Java,Jsp,Design Patterns,Servlets,Dao,我正在Oracle网站上阅读有关DAO设计模式的文章,并试图在使用JSP、servlet、普通java对象和MVC模式的上下文中理解下图。在我的例子中,BusinessObject是我的servlet,TransferObject是我的java类,只有属性、变量和访问器(DTO) 例如,如果我在servlet(控制器)中有此代码 (来源:)是的,BusinessObject看起来像MVC的C(控制器)。整个DAO模式是MVC中模型层的一部分,其中BusinessObject提供模型接口,DAO

我正在Oracle网站上阅读有关DAO设计模式的文章,并试图在使用JSP、servlet、普通java对象和MVC模式的上下文中理解下图。在我的例子中,BusinessObject是我的servlet,TransferObject是我的java类,只有属性、变量和访问器(DTO)

例如,如果我在servlet(控制器)中有此代码



(来源:)

是的,BusinessObject看起来像MVC的C(控制器)。

整个DAO模式是MVC中模型层的一部分,其中BusinessObject提供模型接口,DAO和DTO对象是模式实现的一部分

您的servlet将位于控制器层,用于呈现要发送到客户端的HTML(或其他格式)的类将位于视图层

web应用程序的大小和复杂性决定了层是否可以仅从一个类构建


为了回答您的问题,DTO(我们称之为数据持有者对象)只包含属性、getter/setter、清理和验证方法。它们将存储/传输和业务逻辑的实现分离开来。

。在处理表示逻辑的控制器和处理数据访问逻辑的DAO之间,应该有一个包含业务对象的业务层

这些业务对象的主要职责是

  • 为管制员提供业务服务。它们是一个门面
  • 封装应用程序的业务逻辑
  • 划界
  • 使用一个或多个DAO来获取、查找和持久化对象
这一层非常重要,因为您希望能够在一个事务中对数据库执行多个操作。web控制器不应负责处理此问题。此外,web控制器以外的其他客户端(Swing客户端、批处理等)也可以使用相同的业务服务

业务对象通常使用会话EJB或Spring服务实现

它们也很有用,能够

  • 通过模拟业务对象对控制器进行单元测试
  • 通过模拟DAO对业务逻辑进行单元测试

TransferObject是否与DTO或类相同,只包含属性、getter和setter?是的。DTO=数据传输对象。很久以前,它很有用,但现在你很可能可以通过应用程序的所有层传递真正的持久对象。当你说“真正的持久对象”时,你指的是什么?像Hibernate这样的ORM框架?是的。任何允许您持久化对象并以透明方式执行的操作,以便您的对象保持“轻量级”且不与框架耦合。最常见的是Hibernate。因此servlet(或其他什么)将使用这些业务对象轻松执行粗粒度的业务操作,例如“新预订”或“取消预订”?确切地说。他们也不关心新的保留是否涉及4种不同数据库访问中的一种或三种,或者是否触发JMS队列中的消息发布。这是业务层的。。。生意,这是有道理的。您认为这种分层方法适用于基于web的小型项目吗?我所说的“小”是指像登录、注销和5个CRUD用例。是的,这并不有害。如果我被迫“牺牲”一个层,它将是DAO层,而不是服务层。我只会在使用ORM(JPA,Hibernate)和DAO实现起来微不足道的情况下这样做。@JBNizet我现在无法使用Spring或Hibernate之类的框架,但这非常有用。
DTO.setFirstName(request.getParameter("firstName"));
DTO.setLastName(request.getParameter("lastName"));
DAO.save(DTO);