遵循干净架构的 Spring Boot 应用程序中映射器的职责以及 DTO、Pojo 和实体的隔离

问题描述 投票:0回答:1

我有一个 Spring Boot CRUD 应用程序。 以单个实体“用户”为例

我已经通过三个包将应用程序分布在三层

  1. 实体(用户实体,用户存储库)
  2. 基础设施(UserDto,RestUserController)
  3. 用例(UserPpojo、CRUD 用例作为服务)

我尽量保持三层完全独立

  1. UserDto 通过控制器方法发送和接收
  2. UserPojo 在整个服务(用例)中发送和接收
  3. UserEntity 在整个服务(用例)中发送和接收

我有两个地图绘制者

  1. 实体到Pojo
  2. dtoToPojo

以我有限的知识,我认为隔离足以保持干净的架构

我有两个无法纠正的担忧/困境

  1. 映射器属于哪些层
  2. 因为每一层只处理一种数据货币(DTO、Pojo、Entity),所以必须在传递到不同层之前或之后进行映射,因此映射的责任应该坚持在同一层或另一层

例如, 我有一个控制器方法来添加用户

public ResponseEntity<UserDto> add(UserDto userDto) {
        UserPojo userPojo = userPojoToDtoMappers.toPojo(userDto);
        userPojo = createUserUseCase.execute(userPojo);
        return ResponseEntity.ok(userPojoToDtoMappers.toDto(userPojo));
    }

以及从控制器调用的服务方法

public UserPojo execute(UserPojo userPojo) {
        return userPojoGateway.add(userPojo);
    }

在我的示例中,映射的负担由调用层(控制器)承担,但这似乎破坏了干净的架构,因为 POJO 信息必须与控制器和服务层共享

请建议哪一层应该有映射器,以及调用者或接收者是否应该承担映射的负担

java spring-boot clean-architecture
1个回答
0
投票

这与调用者和接收者方法无关。在这里,我们正在尝试实现分层架构。在分层架构中,您希望各层之间有一定的抽象。

  1. 控制器应该提供一些抽象。在控制器中,您应该放置与传入请求和 API 最终响应相关的逻辑
  2. 所有映射和业务逻辑都应该发生在服务层中。
  3. 最后DAO层应该有实体和数据库操作的映射。

我希望它能帮助您理解这个概念。

© www.soinside.com 2019 - 2024. All rights reserved.