【发布时间】:2019-03-10 14:17:50
【问题描述】:
所以我的问题是在我的项目中,我在我的服务类中使用模型映射器。因此,当服务调用 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。
【问题讨论】:
-
除非你有一个实际负载的性能配置文件告诉你,你在创建对象的数量上有问题,有 99% 的机会只是猜测,假设它可能是问题。我建议使用飞行记录器运行您的应用程序,以查看您的应用程序在哪里花费时间。
标签: java performance memory jvm modelmapper