【问题标题】:DAO and Data transfer objectDAO 和数据传输对象
【发布时间】:2013-06-08 15:39:40
【问题描述】:

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

public class dto{

setters and getters...
..
..

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

}

会不会违背 DAO 模式本身?

提前致谢。

【问题讨论】:

  • 我认为答案就在你的问题中应该有数据传输对象 只有setter和getter
  • @AdamSiemion 感谢您的回复!然而为什么会这样呢?这样做会有什么问题?
  • 数据传输对象 (DTO) 只能用于在层之间传输数据。当您需要执行数据库操作时,就有了数据访问对象(DAO)。所有与数据库相关的操作都应仅在 DAO 类中执行。

标签: java design-patterns dao


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-07-11
          • 2012-09-15
          • 1970-01-01
          • 2014-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-14
          • 1970-01-01
          相关资源
          最近更新 更多