【发布时间】:2017-12-13 06:11:27
【问题描述】:
我有 DTO 和 DOMAIN 模型:
@Data
public class CarDomain {
private String name;
private int year;
private String color;
}
和
@Data
public class CarDto {
private String name;
private int year;
private String color;
}
我有 3 个微服务 (MS) 通过 RabbitMq 相互通信。
我有所有 DTO 课程的models module。每个MS包括models module
在 Maven 中。
1 MS 发送 carDto 2 MS 接收 CarDto 并转换为域。为此,我可以使用几种变体:
- 使用库例如
mapstruct:
@Mapper public interface CarMapper { CarMapper INSTANCE = Mappers.getMapper(CarMapper.class ); CarDto carToCarDto(CarDomain car); }
并使用:
CarDto carDto = CarMapper.INSTANCE.carToCarDto(carDomain);
- 创建手动映射器:
class CarMapper { public static CarDto toDto(CarDomain car) { CarDto carDto = new CarDto(); carDto.setName(car.getName()); carDto.setYear(car.getYear()); carDto.setColor(car.getColor()); } }
现在我们使用 2 个变体。因为当我们构建微服务和models module 某些 DTO 模型更改字段时,我们会在编译时出错。例如,有人在models module 中更改此 dto 模型的名称
private String name;
到
private String name1;
当我们构建项目时,我们在这一行得到错误:
carDto.setName(car.getName());// getName not found becose now getName1
但这很难。对于每个 dto/domain 模型,我们需要创建映射器并编写每个字段。在 1 个变体中它更容易,但如果 dto 更改我们会在运行时出错。
告诉我如何匹配/映射模型 dto/domain 的最佳方法?
【问题讨论】:
-
如果您还没有这样做的话,不妨看看这个视频:youtube.com/watch?v=yPvef9R3k-M
标签: java domain-driven-design microservices dto