【问题标题】:Is it bad to inject ModelMapper bean into a DTO for an entity containing a set of other entities? (Builder)将 ModelMapper bean 注入包含一组其他实体的实体的 DTO 是否不好? (建设者)
【发布时间】:2022-01-21 01:56:16
【问题描述】:

将 ModelMapper bean 注入到包含一组其他对象的类的 DTO 中是否不好? (建设者) 你好

我有一个 JPA 实体用户,它与 UserStats 具有 u/OneToMany 关系,我已经为这两者创建了 DTO,并使用了 Lombok 构建器注释。

我想知道是否这样做:

@Getter
@Setter
@Builder
UserDTO {

@Autowired
ModelMapper modelMapper;

private String username;

private String password;

@JsonIgnore
private Integer totalGamesPlayed = 0;

@JsonIgnore
String highestAchievedLeagueType = "bronze";


UserStatsDTO userStatsDTO = UserStatsDTO.builder()
.isLeagueUserStats(false)
.build();
UserStatsDTO leagueUserStatsDTO = UserStatsDTO.builder()
.isLeagueUserStats(true)
.build();

UserStats innerUserStats = modelMapper.map(userStatsDTO, UserStats.class);
UserStats leagueUserStats = modelMapper.map(leagueUserStatsDTO, UserStats.class);
//array of strings
UserStats[] userStatsArray = {innerUserStats, leagueUserStats};
private List<UserStats> userStats = Arrays.asList(userStatsArray);

}

是不好的做法吗?我的意思是,如果不是,我必须自己在服务层中设置它?

【问题讨论】:

    标签: java spring spring-boot spring-mvc design-patterns


    【解决方案1】:

    ModelMapper bean 注入 DTO 是不好的。它不灵活。
    DTO 对象应该:

    • 尽可能简单。
      DTO 通常被创建为 POJO。它们是不包含业务逻辑的平面数据结构。它们仅包含与序列化相关的存储、访问器和最终方法。
    • 与域或持久对象分离。
      我们可以从我们的领域模型构建不同的视图,允许我们创建同一领域的其他表示,但优化它们以满足客户的需求,而不会影响我们的领域设计。传输数据的映射器组件,确保 DTO 和域模型不需要相互了解。在您的示例中,DTO 知道持久性对象,因此需要将其解耦。

    查看优秀设计示例:Data Transfer Object

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 2021-04-12
      • 1970-01-01
      相关资源
      最近更新 更多