【问题标题】:Difference between Model classes and DAO classesModel类和DAO类的区别
【发布时间】:2020-08-22 07:29:35
【问题描述】:
我是基于 Java 的 Web 应用程序的新手。我必须使用 MVC 结构创建一个动态 Web 项目。到目前为止,我创建了三个包和一些 java 类,如下所示。我对这些事情有些怀疑
-
谁能解释一下模型类和DAO类的区别
-
由于我使用的是 MVC 结构,我真的需要为 DAO 创建一个单独的包,还是可以将所有 DAO 类实现放在 Model 类中?因为MVC的意思是Model-View-Controller
模型类
DAO 类
【问题讨论】:
标签:
java
model-view-controller
model
dao
【解决方案1】:
谁能解释一下模型类和 DAO 的区别
类
这些是非常不同的东西。
DAO 是面向 CRUD 的数据服务(读取/创建/更新/删除数据),模型是表示数据的对象。 DAO 使用模型,但不是相反。
由于我使用的是 MVC 结构,我真的需要创建一个单独的
DAO 的包还是可以把所有的 DAO 类
Model 类中的实现?
因为 DAO 和模型是两个不同的概念(虽然相关),所以将它们的类分开在两个不同的包中似乎更清楚。
【解决方案2】:
DAO 类与您的持久性系统(通常是数据库)和控制器进行通信,并在它们之间移动模型类的实例。模型类代表您正在使用的真实世界(例如,医院管理应用程序的患者、医生和预约,或银行应用程序的客户、帐户等)。理想情况下,您的模型类甚至不应该知道存在 DAO。所以是的,将它们放在不同的包中是有意义的,因为它们是不同的东西。请注意,即使您的应用程序遵循 MVC 模式,这并不意味着您的应用程序只关注视图、模型和控制器。您可以并且通常会有其他问题,例如持久性,属于它们自己的层。
您可能想做的另一件事是拥有DTOs。它们是模型实体的附加表示(但它们应该放在自己的包中,而不是模型包中),但 DTO 不必具有与模型类相同的属性。 DTO 是控制器应该提供给视图的内容。这样,您的视图不知道您的模型,并且您不会向视图层公开您不想公开的模型类的任何属性。例如,如果您有一个包含信用卡号信息的客户模型类,但您有一个不需要显示该信用卡号的视图,您可以创建一个包含其他客户数据的 DTO 并使用它为该视图发送不需要的数据到您的视图。