为了账号安全,请及时绑定邮箱和手机立即绑定

到处使用 DTO 会影响 jvm 上的内存使用吗?

到处使用 DTO 会影响 jvm 上的内存使用吗?

喵喵时光机 2021-10-28 09:55:07
所以我的问题是在我的项目中,我在我的服务类中使用模型映射器。因此,当服务调用 Dao 层(实际上只是一个 JPA Repository 接口)时,Dao 层现在成功返回实体而不是仅返回实际实体,我首先将其转换为 DTO(这是实体的精确副本)使用java的模型映射器。因为我不想直接公开我的实体。代码示例:public class FormService {    @Autowired    private FormMasterDao formMasterDao;    @Autowired    private ModelMapper mapper;    public FormMasterDTO save(FormMasterDTO formMasterDTO) {        FormMaster formMaster = buildFormMaster(formMasterDTO);        return convertToFormMasterDTO(formMasterDao.save(formMaster));    }    public List<FormMasterDTO> findById(String id) {        return formMasterDao.findByIdIn(id)                .stream()                .map(this::convertToFormMasterDTO)                .collect(toList());    }    public void updateAll(List<FormMasterDTO> formMasterDTOList) {        formMasterDao.saveAll(formMasterDTOList.stream()                .map(this::convertToFormMaster)                .collect(toList()));    }    public FormMasterDTO update(FormMasterDTO formMasterDTO) {        return convertToFormMasterDTO(formMasterDao.save(convertToFormMaster(formMasterDTO)));    }    private FormMasterDTO convertToFormMasterDTO(FormMaster formMaster) {        return mapper.map(formMaster, FormMasterDTO.class);    }    private FormMaster convertToFormMaster(FormMasterDTO formMasterDTO) {        return mapper.map(formMasterDTO, FormMaster.class);    }}我发现这种方法很有用,因为如果许多开发人员工作和编写代码,他们就不能直接使用实体。但我想知道,使用这种方法是否不好?会,它会影响 JVM,因为每次有人点击服务时,我都会将其转换为 DTO。
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

如果您担心从纯 JPA 对象转换为 DTO 的时间成本,那么请不要担心。这是为什么。

与许多其他操作相比,对象分配确实很慢,但与 IO 相比一点也不慢。我确信您的 JPA 服务会从数据库中获取一些东西。如果我是对的,那么突然间您花在新对象分配上的时间(以及以后产生的 GC 成本)将少于您花在 DB 操作本身上的时间的 0.01%。

如果您针对速度进行了优化,减少内存分配是一个好主意,但到目前为止,这应该不是您要做的第一件事。只有在优化成本更高的操作(例如数据库查询)之后才有意义。

免责声明: 在某些情况下,您的 DTO 会被证明是昂贵的。如果您碰巧在 JPA 对象中使用延迟加载,那么您即将进行的 DTO 转换将完全击败它。延迟加载将允许 JPA不获取JPA 对象图的某些子元素,但作为 DTO 转换的一部分,您每次都会请求“可选”数据,这反过来会使您回到开始使用Lazy.


查看完整回答
反对 回复 2021-10-28
  • 1 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信