我正在使用SpringBoot中的Apache Beam,并使用JDBCIO在.query中从“customer”表(select * from records.customer where customer_code =“abc”)中检索记录。那么这个“customer”类应该是一个实体还是DTO?
我的理解是只有在使用存储库时才需要实体。如果我错了,请纠正我。
我正在使用SpringBoot中的Apache Beam,并使用JDBCIO在.query中从“customer”表(select * from records.customer where customer_code =“abc”)中检索记录。那么这个“customer”类应该是一个实体还是DTO?
我的理解是只有在使用存储库时才需要实体。如果我错了,请纠正我。
根据您的领域,您可以使用其中任何一个。 实体用于与您的领域范围一起使用。它适用于“行为”。 数据传输对象(DTO)用于将数据从一个进程/模块传输到另一个。
在处理 JPA 存储库时,您会使用 Entity
。需要记住的是,Entity
基本上是对数据库的表示,因此例如在 Hibernate(JPA 实现)中,您对 Entity
数据进行的每个更改都将在某个时刻持久化到数据库中。这可能正是您所需的,也可能不是,您必须保持谨慎。想象一下,在两个不同的Service
类之间共享Entities
,其中一个类对其进行更改,可能会产生副作用。这通常是错误的来源。
DTO(数据传输对象)通常用于通过 REST API 公开您的 Entities
。如果您使用 Entity
本身,则在 Jackson 尝试将对象序列化为 JSON 时可能会遇到麻烦。您也可以看到实际使用 DTO 在 Services
之间进行通信的代码。这通常会减少漏洞的可能性(如前面所述),但也会使您的代码更加复杂,并可能使实现某些用例变得困难。