1

所以在数据传输对象中应该只有setter和getter。但是如何处理从数据传输对象中插入和删除对象呢?

public class dto{

setters and getters...
..
..

public void delete(){
CustomreDao.delete(this.ID);
}

}

会不会违背 DAO 模式本身?

提前致谢。

4

4 回答 4

2

问问自己这个问题:“更新 DAO 的删除方法有多难?” 如果您有很多 DTO,并且突然需要更改 DAO,那么这就是您为自己创建的大量工作。

将 DTO 连接到 DAO 的责任留给其他东西,在那里您可以从单点控制交互。

于 2013-06-12T13:44:27.917 回答
2

这是面向对象语言的设计原则。根据单一职责原则,每个班级应该只有一个职责。DTO 类的职责是存储用于传输目的的数据。它不应该像您在示例中那样具有任何行为。

于 2013-06-12T13:46:56.663 回答
1

数据传输对象只是用于在层和层之间传输数据的数据容器。它主要包含属性,您甚至可以使用没有getter和setter的公共属性。数据传输对象不包含任何业务逻辑。

DTO 除了存储和检索自己的数据(访问器和修改器)之外没有任何行为。

于 2013-06-12T13:41:40.693 回答
1

我认为答案是肯定的——这违反了 DAO 模式。

数据访问对象模式是关于封装对对象存储的访问。

您甚至可以根本不使用数据传输对象。

你在说什么 - 在业务对象本身中有方法是我更喜欢的 Active Record 模式。

您甚至可以同时使用这两种方法 - 例如,使用 CustomerDao 作为通过数据库实现数据访问的一种方式,但使用 ActiveRecord 来获得方便的接口:

customer.save();
anotherCustomer = Customer.find(id);

这些方法可以在内部使用 CustomerDao。

我相信 DTO 被不同的复杂框架使用,如果你可以避免使用它 - 你可以直接使用而不需要额外的 DTO 层。

于 2013-06-12T13:46:20.373 回答