DTO和DAO概念以及MVC

184
  1. 为什么我们要使用DTO和DAO,以及何时应该使用它们。我正在开发一个涉及插入、编辑、删除数据的GUI Java软件。但是我很难区分DTO/DAO和Model-View-Controller(MVC)结构?它们是否相似?在通过Java GUI与数据库交互时,哪个更好?

  2. 我非常好奇的一件事情是,在一个类中同时包含View和Controller是否是一个好习惯。如果我们考虑NetBeans,可以创建GUI Frame类,并向其中添加组件,如JButton,双击按钮将带您进入actionListener方法(控制器),该方法似乎在框架中要显示给用户的数据(视图)。因此,它们在同一个类中。那么这完全违背概念吗?

这里是我的讨论内容

在一个类中同时包含视图和控制器是否是一种不好的做法?


1
@RomanC 有一个数据库表,保存了事件(Event)的信息(eventId,name,date.etc),那么DTO和MVC是相同的还是不同的呢? - Hoody
在数据库中,您没有DTO,而是数据库对象。 - Roman C
如果不是这样的话,那么如果您使用第二个选择,它将如何与第一个选择相关? - Roman C
1
似乎你有很多不同的概念和模式,虽然它们经常在应用程序中一起使用,但应该逐个解决。DTO和DAO是非常不同的概念,与MVC相比并不是“二选一”的关系。 - Philip Tenn
与 https://dev59.com/vnI-5IYBdhLWcg3w6tFR 相关的编程内容 - Ahmed Nabil
显示剩余4条评论
1个回答

372

DTO是Data Transfer Object的缩写,用于在应用程序的类和模块之间传输数据。

  • DTO应只包含私有字段、获取器、设置器和构造函数。
  • 不建议向DTO类添加业务逻辑方法,但可以添加一些实用方法。

DAO是Data Access Object的缩写,因此应封装检索、保存和更新数据存储(数据库、文件系统等)的逻辑。

以下是DAO和DTO接口的示例:

interface PersonDTO {
    String getName();
    void setName(String name);
    //.....
}

interface PersonDAO {
    PersonDTO findById(long id);
    void save(PersonDTO person);
    //.....
}

MVC是一种更广泛的模式。在MVC模式中,DTO / DAO将成为您的模型。
它告诉您如何组织整个应用程序,而不仅仅是负责数据检索的部分。

至于第二个问题,如果您有一个小应用程序,则完全可以,但是如果要遵循MVC模式,最好有一个单独的控制器,该控制器将在单独的类中包含框架的业务逻辑,并从事件处理程序向此控制器发送消息。
这将使您的业务逻辑与视图分离。


5
我不确定你所说的 "separate controller" 是什么意思。根据我的阅读,MVC 中的控制器应尽可能精简,业务逻辑应该封装在模型中。 - Paul Carlton
11
使用DTO来接口化对象模型是一个糟糕的做法。void save(PersonDTO person)是很糟糕的。 - Ben
6
为什么我们在拥有像 POJO 这样的类对象时还需要 DTO?它们不是一样的吗? - Bhargav
8
DTO(数据传输对象)用于返回多个实体(POJO)的组合结果或从实体返回有限资源。 - The Coder
3
@Ben 我知道这有点晚了,但这很有趣。你会怎么更好地编写 void save(PersonDTO person) - Madhawa Priyashantha
显示剩余5条评论

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