【问题标题】:Does DTOs comes under decorator pattern?DTO 是否属于装饰器模式?
【发布时间】: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,但由于我们提供映射实现,我们可以说它是装饰器模式吗?还是这里用到了其他设计模式?

【问题讨论】:

标签: java oop design-patterns decorator dto


【解决方案1】:

它不是装饰器模式,因为装饰器模式

允许将行为动态添加到单个对象,而不会影响同一类中其他对象的行为。

由于您映射到另一个类,所以它不是同一个类。

【讨论】:

    猜你喜欢
    • 2012-01-20
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 2018-01-16
    相关资源
    最近更新 更多