首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NestJS,如何和在何处构建响应DTO

NestJS,如何和在何处构建响应DTO
EN

Stack Overflow用户
提问于 2022-04-28 06:21:27
回答 2查看 5.6K关注 0票数 5

我一直在使用developing框架来开发Microservices。最近,我开始探索NestJS,并有一个关于构建响应DTO的问题。

在Spring中,控制器是轻量级的,它们传递对服务层的调用。

服务层实现业务逻辑,最后,它们调用负责构建响应DTO的Mapper类。mapper类可能与将实体克隆到DTO一样简单,也可能使用多个DB实体对象构建复杂对象。

在NestJS中,大多数示例都使用class-transformer。但我不确定class-transformer是否足以构建复杂的对象。对我来说,class-transformer基本上是克隆对象。在Spring中对应的值是

代码语言:javascript
运行
复制
BeanUtils.copyProperties(workingWellCompositeMemberContactTrace, workingWellDailyMemberAggEntity);

所以我的问题是在NestJS中,哪一层负责构建复杂的响应对象?将实体对象发送给Controller是一个很好的实践吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-28 06:47:47

另一个答案中的人画出这幅图,它解释了NestJS内部请求的生命周期(向该人大声呼喊):

要回答您的问题:what layer is responsible for building complex response objects? --我说拦截器是处理请求的最后一点逻辑,但我猜您要问的是“实体在哪里自动将转换为do?”这就解释了你的第二个问题:Is sending Entity object to Controller a good practice?

简短的回答:视情况而定。长长的答案:DTO对于将请求逻辑与服务逻辑分离开来非常有用,有些值您可能不希望用户知道,只是在逻辑中填充它们.因此,使用它们是一个很好的实践。但是,真的,想想你的项目,它的大小和你想要完成的事情,特别是现在你必须处理这个转换。

这就是说,实体和DTO之间的转换。您可以做的一件事是在参数之间设置一个完整的手动设置:

代码语言:javascript
运行
复制
export class UserDTO {
    id: string;

    name: string;

    surname: string;

    toEntity(dto:UserDTO) {
        const model = new User();    
        model.id = id;
        model.fullname = `${dto.name}, ${dto.surname}`
        return model;
    }

    fromEntity(entity:User) {
        const dto = new UserDTO();
        dto.id = entity.id;

        const [ name, surname ] = entity.(fullname as string).split(', ').map((name) => {name.tirm()});
        dto.name = name,
        dto.surname = surname;
    }
}

另一方面,class-transformer及其对instanceToPlainplainToClass的使用可以完成大量的任务。通过使用装饰器作为ExposeExclude,您可以处理大多数用例。

如果这还不够,您可以使用以下内容:https://www.npmjs.com/package/@automapper/nestjs

票数 9
EN

Stack Overflow用户

发布于 2022-10-17 20:15:25

Nestjs为DTO提供了PartialType()、PickType()、OmitType()等辅助方法,您可能需要在这里阅读:https://docs.nestjs.com/techniques/validation#stripping-properties

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72038893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档