Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 传入和传出DTO的最佳实践_Java_Rest_Api Design - Fatal编程技术网

Java 传入和传出DTO的最佳实践

Java 传入和传出DTO的最佳实践,java,rest,api-design,Java,Rest,Api Design,我面临一个API设计问题。考虑以下流程: 如您所见,我有两个类来表示我的模型SomethingDTO和SomethingResponse,还有两个类来表示第三方模型第三方请求和第三方响应。我正在使用映射器提供从第三方模型类到我的模型类的转换 问题是:这4个类都有完全相同的属性 我应该在所有这些类中重复这些属性吗?对于整个流程,我应该只有一个DTO类吗 解决这个问题的最佳实践或模式是什么 谢谢这是一个艰难的时刻。务实与正确 在我看来,正确的方法是为每个请求/响应使用不同的类,这就是您所做的。这是因

我面临一个API设计问题。考虑以下流程:

如您所见,我有两个类来表示我的模型SomethingDTO和SomethingResponse,还有两个类来表示第三方模型第三方请求和第三方响应。我正在使用映射器提供从第三方模型类到我的模型类的转换

问题是:这4个类都有完全相同的属性

我应该在所有这些类中重复这些属性吗?对于整个流程,我应该只有一个DTO类吗

解决这个问题的最佳实践或模式是什么


谢谢

这是一个艰难的时刻。务实与正确

在我看来,正确的方法是为每个请求/响应使用不同的类,这就是您所做的。这是因为我尝试使用领域驱动设计来设计应用程序。这样做的好处是,在对象开始发散的场景中,可以提供更大的灵活性和清晰度

如果类具有完全相同的属性,我将采取一种务实的方法,即每层有一个类。因此,一个用于Web请求/响应,另一个用于第三方。但在任何情况下,“我”都不会混合前端和第三方的两个集成层

整件事只上一节课真的很难闻。正如我上面提到的,因为这是混合层或端口

与我一样,使用DTO有助于将持久性模型与API模型解耦。看来你做的是对的

问题是:这4个类都有完全相同的属性

将API的模型与第三方API的模型解耦始终是一个好主意。如果第三方API改变了他们的合同,你就不会破坏你的客户。因此,为每个API使用不同的模型

并坚持,例如,减少样板代码。您还可能需要考虑为您生成GETTER、SETTER、HEALS、HASCODE和ToStudio方法。

我应该在所有这些类中重复这些属性吗?对于整个流程,我应该只有一个DTO类吗

如果请求和响应模型都包含相同的字段集,那么可以从一个类开始,用于表示每个API的请求和响应有效负载。当这些字段开始将请求有效负载与响应有效负载区分开来时,您将为表示每个有效负载创建新的模型


从长远来看,对请求和响应使用不同的模型将为您提供灵活性,确保您只公开和接收您想要的属性。

我非常感谢您的回答。我不知道MapStruct。很好。Lombok不被我的同事欣赏,所以我们决定避免它=/我将把你的建议与@cassiomolin的建议合并:从每层1个类开始,当字段开始不同时创建新类。非常感谢。@GarryDias看起来你把评论搞糟了。不管怎样,如果我的答案解决了你的问题,考虑一下投票,甚至接受它:我试着在这个帖子里编辑我的评论,但是StPoSoad让我等几分钟做编辑。我忘了回来保存编辑。但我给奥古斯托的评论几乎是一样的;非常感谢。