何时使用实体,何时使用DTO



所以我正在使用Apache beam和SpringBoot,并在.query中使用JDBCIO从表中检索记录"客户";(从records.customer中选择*,其中customer_code="abc"(;客户";类应该是实体还是DTO?

我的理解是,只有当我们使用存储库时,我们才需要一个实体。如果我错了,请纠正我。

您可以根据您的域使用其中任何一个。实体用于与您的域范围相关联。它适用于";行为";。DTO(数据传输对象(用于将数据从一个进程/模块传输到另一个进程或模块。

在处理JPA存储库时,您将使用Entity。需要记住的是,Entity基本上是数据库的一种表示,因此,例如使用Hibernate(一种JPA实现(,Entity数据中的每一个更改都将在某个时刻持久化到数据库中。这可能正是你需要和想要的,也可能不是,你必须谨慎。想象一下,您在两个不同的Service类之间共享Entities,其中一个类对其进行了更改,实际上会产生副作用。这通常是错误的来源。

DTO(数据传输对象(通常用于通过REST API公开Entities。如果您使用Entity本身,当Jackson试图将对象序列化为JSON时,您可能会遇到麻烦。您还可以看到实际使用DTO在Services之间进行通信的代码。这通常会降低出现错误的可能性(如前所述(,但也会使代码更加复杂,并可能使某些用例难以实现。

最新更新