DTO的设计模式

时间:2014-06-17 18:12:55

标签: java design-patterns data-transfer-objects

我有一个使用jdbc进行数据库调用的Web应用程序。 我有一个服务,dto和dao层。 我有一个巨大的请求xml。我可以将请求对象传递给dao方法,还是应该将请求传递给dto模型,然后将dto对象作为参数传递给我的dao方法? 哪种方法正确?

public TestServiceClass addSurveySubmitDetails(TestRequestXML testRequestXML){
          //call to dao method
          TestDao = testdao = new TestDao(testRequestXML);

   }

         OR

    public TestServiceClass addSurveySubmitDetails(TestRequestXML testRequestXML){

         //create dto object
         TestDTO testDTO = new TestDTO();
         testDTO .setId(testRequestXML);

          //call to dao method
          TestDao = testdao = new TestDao(testDTO );

   }

哪种方法正确?

4 个答案:

答案 0 :(得分:2)

这取决于您的体系结构,但由于 DTO Data Transfer Object,因此没有理由在服务和dao层之间使用它们。

您可以在服务层中使用一个,我想在下面的代码示例中,但无论如何,这取决于您的应用程序的架构。

   public TestServiceClass addSurveySubmitDetails(TestDTO testDTO){
          TestRequestXML testRequestXML = testDTO.getId();
          TestDao = testdao = new TestDao(testRequestXML);

   }

有关DTO的更多信息

Data Transfer Object

LocalDTO

答案 1 :(得分:2)

我认为没有正确或错误的答案。在我看来,这是非常主观的。

但我个人希望在控制器和服务之间有一个薄层(假设您正在使用MVC模式),它的唯一任务是将请求(XML,Json等)转换为域对象。

当您拥有需要在视图中显示信息的复杂域对象或聚合时,它非常有用。

答案 2 :(得分:0)

YAGNI是个好主意,尽可能保持简单的设计

答案 3 :(得分:0)

DTO真正用于远程呼叫。如果要通过网络将数据发送到其他虚拟机,请使用DTO。如果您要将数据发送到同一虚拟机上的另一个本地类,请不要使用DTO。 DTO只是远程传输数据的有效方式。它在任何其他地方都没有任何优势。