模型类与DAO类的区别

6

我是一个新手,对于基于Java的Web应用程序并不熟悉。我需要使用MVC结构创建一个动态Web项目。到目前为止,我创建了三个包和一些Java类,如下所示。我对这些事情有一些疑惑

  1. 请问模型类和DAO类之间有何区别?

  2. 既然我正在使用MVC结构,那么我是否需要为DAOs创建单独的包,或者将所有DAO类实现放在Model类中也可以呢?因为MVC意味着模型-视图-控制器。

三个包

模型类 样例模型类

DAO类 样例DAO类

2个回答

6
DAO类既与持久化系统(通常是数据库)交互,也与控制器交互,并在它们之间移动模型类的实例。模型类是您正在处理的真实世界内容的表示(例如,医院管理应用程序中的患者、医生和预约,或银行应用程序中的客户、帐户等)。理想情况下,您的模型类甚至不应该知道有DAO的存在。因此,将它们放在不同的包中是有意义的,因为它们是不同的事物。请注意,即使您的应用程序遵循MVC模式,这并不意味着您的应用程序只关注视图、模型和控制器。您可能还有其他问题需要关注,比如持久性,这些问题属于它们自己的层次。

除此之外,您可能还想做的一件事情是,有DTOs。它们是模型实体的附加表示(但它们应该放在自己的包中,而不是模型包中),但DTO不必具有与模型类相同的属性。 DTO是控制器应该提供给视图的数据(反之亦然)。这样,您的视图就不知道您的模型,并且您不会向视图层公开您不想公开的任何模型类属性。例如,如果您有一个客户模型类,其中包含有关他们的信用卡号码的信息,但是您有一个视图不需要显示该信用卡号码,您可以创建一个DTO,其中包含其他客户数据,并将其用于该视图,而不将不需要的数据发送到视图。


关于“DTO 是控制器应该向视图提供的内容”的问题: DTO 设计用于在层之间传递数据,因此可以反过来使用,这意味着我可能会遇到这样一种情况,即某个模型DTO 从视图中携带数据返回到控制器,然后再传回模型,请问我的理解是否正确? - Ahmed Alhallag
1
@AhmedAlhallag 正确。这种通信通常是双向的。 - JustAnotherDeveloper

5
有人能解释一下模型类和DAO类之间的区别吗?
这两者是非常不同的东西。DAO是一个CRUD(创建、读取、更新、删除数据)数据服务,而模型是表示数据的对象。DAO使用模型,但反过来不行。
既然我正在使用MVC结构,我是否真的需要为DAO创建一个单独的包,或者把所有的DAO类实现都放在模型类中是否可行?
由于DAO和模型是两个不同的概念(虽然相关),将它们的类分割成两个不同的包似乎更清晰。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接