【发布时间】:2022-06-11 00:22:46
【问题描述】:
我正在使用 Nest.js 构建 API,并且一直在使用映射器将 TypeORM 实体转换为 DTO(反之亦然)。
到目前为止,我一直在手动执行此操作:
public static async entityToDto(entity: UserEntity): Promise<UserDto> {
const dto = new UserDto();
dto.id = entity.id;
dto.emailAddress = entity.emailAddress;
dto.firstName = entity.firstName;
dto.lastName = entity.lastName;
dto.addressLine1 = entity.addressLine1;
dto.addressLine2 = entity.addressLine2;
dto.townCity = entity.townCity;
[...]
return dto;
}
在我看来,这是一个不错的(虽然不灵活)的方法。它明确控制将哪些字段返回给用户,从而最大限度地减少泄漏敏感字段(如密码哈希)的机会。但是,我的印象是 DTO 的目的是有一个地方来修改有关某事的数据。如果我需要添加一个字段,我必须修改 both DTO 和 映射器。
每个实体都有一个映射器似乎是惯例。但是,如果我不想返回,例如,accountStatus 字段,我将不得不编写一个新的映射器。所以我现在有多个映射器需要修改。
我的想法是编写一个“通用”映射器,它查看 DTO 中的字段,并将它们映射到实体中的字段。
我对 TypeScript 和 Nest.js 比较陌生,所以我想知道其他人是如何管理这个的。
【问题讨论】: