我一直在使用 Java Spring 框架來開發微服務。最近我開始探索 NestJS 并有一個關于構建回應 DTO 的問題。
在 Spring 中,控制器是輕量級的,它們將呼叫交給服務層。
服務層實作業務邏輯,最后,他們呼叫負責構建回應 DTO 的 Mapper 類。映射器類可能就像將物體克隆到 DTO 一樣簡單,也可能使用多個 DB 物體物件構建復雜的物件。
在 NestJS 中,大多數示例class-transformer都在使用。但我不確定它class-transformer是否足以構建復雜的物件。對我class-transformer來說基本上是克隆物件。在 Spring 中的等價物是
BeanUtils.copyProperties(workingWellCompositeMemberContactTrace, workingWellDailyMemberAggEntity);
所以我的問題是在 NestJS 中,哪個層負責構建復雜的回應物件?將物體物件發送到控制器是一種好習慣嗎?
uj5u.com熱心網友回復:
另一個答案中的某個人畫了這張圖,它解釋了 NestJS 中請求的生命周期(向那個人大喊):

回答你的問題:what layer is responsible for building complex response objects?好吧,我說攔截器是處理請求的最后一點邏輯,但我猜你要問的是“物體在哪里自動轉換為 DTO?” 這將解釋你的第二個問題:Is sending Entity object to Controller a good practice?
簡短的回答:這取決于。長答案:DTO 對于將您的請求邏輯與您的服務邏輯分離非常有用,有些值您可能不希望用戶知道并將它們填充到您的邏輯中......因此,使用它是一個好習慣他們。但實際上,想想你的專案,它的規模以及你想要完成的事情,特別是現在你必須處理這種轉換。
也就是說,關于物體和 DTO 之間的轉換。您可以做的一件事是在引數之間進行完全手動設定:
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使用instanceToPlainand來完成plainToClass。通過使用裝飾器Expose,Exclude您可以處理大多數用例。
如果這還不夠,你可以使用類似的東西:https ://www.npmjs.com/package/@automapper/nestjs
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467294.html
標籤:javascript 节点.js 春天 巢穴 打字机
上一篇:為成功API回應添加攔截器
