【发布时间】:2021-04-01 20:28:01
【问题描述】:
我在两个不同的 Entity 和 DTO 包中定义了 Entity 和 DTO 类:
@Entity
@Table(name="Foo", schema="REF_DATA")
public class Foo extends BaseEntity {
private Long fooId;
private String fooName;
}
public class FooDto extends BaseDto {
private Long fooId;
private String fooName;
}
在向用户返回值时,我们返回的是 DTOs 而不是 Entity 对象。为此,我们已将映射器及其实现声明为:
public interface DomainToDtoMapper<E extends BaseEntity, D extends BaseDto> {
D mapDomainToDto(E domain);
}
public class FooDomainToDtoMapper implements DomainToDtoMapper<Foo, FooDto> {
@Override
public FooDto mapDomainToDto(Foo domain) {
FooDto fooDto = new FooDto();
FooDto.setfooId(domain.getfooId());
FooDto.setfooName(domain.getfooName());
return fooDto;
}
}
获取服务层中所有Foo对象调用的列表如下所示:
@Override
public List<FooDto> getAllFoo() {
return fooRepository.findAll().stream()
.map(FooEntityDomainToDtoMapper::mapDomainToDto) // mapping entity to dto
.collect(Collectors.toList());
}
我的问题是我们在这里使用Decorator pattern 吗?我知道有Data Transfer Object Pattern,但由于我们提供映射实现,我们可以说它是装饰器模式吗?还是这里用到了其他设计模式?
【问题讨论】:
-
转型!= 装饰。装饰维护一个对象层次结构。正如您所指出的,DTO 是它自己的模式。还要考虑Data Transfer Object Is a Shame。
标签: java oop design-patterns decorator dto