【问题标题】:Where to create Entity objects in Spring Rest ? in service, DAO or API layer?Spring Rest 在哪里创建实体对象?在服务、DAO 或 API 层?
【发布时间】:2017-09-11 15:00:25
【问题描述】:

我想知道创建实体对象的最佳层在哪里,例如,我有一个名为 Product 的模型,我已经创建了一个 API post 方法和路径(“/product”)来创建产品,我在想在 API 方法创建 Product 对象,然后将此对象传递给服务层进行验证,然后在验证的情况下将其传递给 DAO 层进行持久化。

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

我很想听听你的想法和想法。

【问题讨论】:

    标签: spring architecture spring-rest


    【解决方案1】:

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

    • 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 对象应该只持久化实体。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-04-22
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        • 2013-09-09
        • 1970-01-01
        • 2018-07-09
        • 1970-01-01
        • 2013-11-27
        相关资源
        最近更新 更多