在 Spring Rest 中的何处创建 Entity 对象?在服务中,DAO 还是 API 层?

Where to create Entity objects in Spring Rest ? in service, DAO or API layer?

我想知道创建实体对象的最佳层在哪里,例如,我有一个名为 Product 的模型,我创建了 API post 方法,路径 ("/ product") 来创建产品,我想在 API 方法中创建一个 Product 的对象,然后将这个对象传递给服务层来验证它,然后在验证的情况下将它传递给 DAO 层坚持下去。

但是我不确定这是否是一个好的做法,我也在考虑将产品参数传递给服务层并在服务层而不是 API 层创建它。

我很想听听您的想法和评论。

每一层都应该做一些工作:

  • API层-验证
  • 服务层 - 应用程序的业务逻辑
  • DAO 层 - 持久化到 DB

我认为最好在 API 层使用 DTO 对象。例如,您可以使用这样的方法:

class ProductController {
    public Response createProduce(@RequestBody @Valid ProductDto productDto) {
        // ...
    }
}

在此方法的主体中,您可以进行一些额外的验证并调用服务方法:

class ProductService {
     public void createProduct(ProductDto productDto) {
         // impl
     }
}

在服务方法的主体中,您应该创建一个实体对象并将 DTO 映射到新创建的实体。然后你应该调用 DAO 层。

在大多数情况下,服务层必须执行比仅从 DAO 对象调用方法更多的操作。并且操作应该在同一个事务中执行,因此,服务层也应该管理事务(我的意思是 @Transactional 注释应该出现在服务方法上)。

DAO 对象应该只保留实体。

根据我的经验,您不会在 API 层中创建实体对象,而是创建数据传输对象 (ProductDTO),包装从 API 调用收到的所有实体属性。此 DTO class 用于服务层中的任何验证,如果一切顺利,您可以让您的产品实体实例仅通过 DAO 持久化。