为啥直接从 Servlet 访问 DAO 是一种不好的做法?

Posted

技术标签:

【中文标题】为啥直接从 Servlet 访问 DAO 是一种不好的做法?【英文标题】:Why is a bad practice to access DAO directly from a Servlet?为什么直接从 Servlet 访问 DAO 是一种不好的做法? 【发布时间】:2018-06-11 14:21:40 【问题描述】:

我正在阅读有关使用 Java 进行 Web 开发的良好做法的主题,发现从 Servlet 调用 DAO 是一种不好的做法。该主题本身并没有解释为什么这是一个不好的做法,尽管它清楚地解释了,按照最佳做法,我们需要一个中间类(例如:一个服务类)来调用 DAO。

为什么这是一种不好的做法?对此有任何理论和/或技术解释吗?

【问题讨论】:

为什么要有一个 DAO 类?为什么不将查询直接放入 Servlet 中? @BoristheSpider 为什么要有 Servlet?为什么不实现自定义 Web 服务器? ;) @ElliottFrisch pah 自定义 Web 服务器 - 为什么不使用 butterflies? @BoristheSpider Of course! 【参考方案1】:

答案是为了可用性

DAO 解析对数据库对象的访问。 Servlet 只能用作处理远程请求和响应(通常是 HTTP)的外观。

Servlet 旨在对参数进行解析/格式化;但他们一定对业务逻辑一无所知。

因此,在 servlet 和 DAO 之间需要一个中间级别的业务逻辑类。这个级别的类必须知道业务规则、数据库模式以及如何使用它。此业务逻辑不得与任何部署模式耦合,因此可以从多个外观中使用(和重用):

servlets/jsps, swing gui, 弹簧控制器, Ant 任务, 等

【讨论】:

@BoristheSpider 已更正。谢谢。 Here 是一个 stackexchange 线程,可能有助于解释。 很好的解释,很有道理。谢谢!

以上是关于为啥直接从 Servlet 访问 DAO 是一种不好的做法?的主要内容,如果未能解决你的问题,请参考以下文章

java中dao层和service层的区别,为啥要用service

当 Servlet、JSP 和轻量级 DAO 层可以工作时,为啥要使用 MVC 框架?

DAO

从 Servlet 和 JDBC 迁移到 DAO 和 Spring,建议?

一种不太合规的PreparedStatement使用方式

如何禁用从 url 直接访问 jsp 页面的页面