在实现 MVC 时,应用程序的哪一部分应该调用 DAO 中的方法? [关闭]

Posted

技术标签:

【中文标题】在实现 MVC 时,应用程序的哪一部分应该调用 DAO 中的方法? [关闭]【英文标题】:When implementing a MVC, which part of out application should call he methods in DAO? [closed] 【发布时间】:2014-01-02 18:48:03 【问题描述】:

我今天有考试,其中一个问题是:

在实现 MVC 时,我们应该从哪个外部 Web 应用程序(控制器或视图)调用 out DAO 实现中定义的方法?你应该解释一下。


我知道控制器负责将传入的 http 请求重定向到适当的视图, 并且视图(JSP 文件)应该使用 DAOs 函数来获取信息并显示它。

我的讲师说我错了,管制员对此作出回应。

当我问为什么,他说“我应该听课”。 再说一遍,为什么要从控制器而不是视图调用 DAO?

【问题讨论】:

你的课堂笔记说了什么?还是他推荐的课本? 有人提名这个重新开放,但我不明白是什么理由。解释推理的评论会有所帮助。否则,如果重新打开,我会很想发布“你应该在讲座中听过”的答案。 :) 【参考方案1】:

你应该听过讲座。

抱歉,开个玩笑:)

Model-View-Controller 是一种重要的设计模式,用于各种 UI 设计。

视图是关于显示数据和与用户交互 - 仅此而已 模型是关于建模和存储数据 - 仅此而已 控制器负责处理数据、映射模型进出模型等。

您应该能够完全从 MVC 系统中交换视图,它会改变用户交互 - 但不会改变程序的行为。从那里应该清楚为什么将逻辑放在视图中是一个坏主意。

DAO 是关于如何实现数据存储和持久层的。视图是关于您如何显示数据的。

它们是两个非常不同的工作,MVC 的全部意义在于将事情分开并给他们自己独立的工作去做。您可以换入和换出不同的持久层并且视图不需要更改,您可以换入和换出不同的视图并且持久层不会改变。

通过直接将表示与持久性耦合,您将失去这种解耦。正确的做法是编写只关心模型的视图。编写只关心数据的模型,然后使用控制器将它们粘合在一起并填充模型。

【讨论】:

谢谢,但我不明白..你能解释得更详细吗?【参考方案2】:

DAO 类用于从 rdbms、xml 等数据源访问数据。 业务对象请求数据通过 DAO 从数据库加载。 DAO 通过使用 sql 查询来实际加载数据。 业务对象代表实际数据,例如:EmployeeBO。像 EmployeeDAO 这样的 DAO 类抽象了业务对象的底层数据库访问逻辑。这促进了脱钩。

Servlet 是一个控制器,它可以创建一个 EmployeeBO,将用户发送的数据存储在 EmployeeBO 中。 EmployeeBO 使用DAO EmployeeDAO 存储或从数据库中读取数据并发送回servlet,servlet 再次将数据传回给jSP。所以 servlet 使用的是 DAO 而不是 JSP。

重点是DAO模式。

【讨论】:

【参考方案3】:

他们都不是。那将是您的问题的答案。

MVC 模式仅适用于 presentation 层,与持久层无关。 DAO 模式适用于 persistence 层。

如果应用于 Web 应用程序,它们是不同的模式。

这两层之间应该是一个服务层。

服务层包含应用程序的所有业务逻辑,同时与表示层和持久层交互。

【讨论】:

以上是关于在实现 MVC 时,应用程序的哪一部分应该调用 DAO 中的方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

NET MVC异常处理模块

我应该将密钥对象的哪一部分传递给“openssl_verify”以验证 Google 签名的 JWT?

HTML里的哪一部分Javascript 会在页面加载的时候被执行?

异常处理模块

C#如何检查if语句的哪一部分是正确的[关闭]

matlab怎么实现数据采集和存储