오늘 작성 할 포스팅은 Nest.js로 작업하면서 리팩토링 한 코드입니다.
작성에 앞서 현재 작업 중인 프로젝트에서 관련 부분에 대해 간단히 설명하면
미술 교육 프로그램(커리큘럼)에 준비물과 키워드, 주차별 정보가 각각 N:M 관계로 할당 되어 있는 구조이다.
그 중 준비물을 대표로 해서 설명해 보자면
create-proram.dto
export default class CreateProgramDto {
@ApiProperty({
description: '프로그램명',
default: '프로그램1',
})
readonly name: string;
@ApiProperty({
description: '준비물',
default: ['스케치북', '연필'],
})
readonly tools: string[];
}
대략 위의 코드 처럼 현재 createProgramDto에서 준비물 정보를 배열로 받아오는데,
기존에는 아래 처럼 for 문을 돌며 하나씩 엔티티를 만들어서 반환하는 형식으로 작성을 했는데, 뭔가 이상했다..
toToolEntity(i: number): Tool {
leechunghyun95 marked this conversation as resolved.
Show resolved
return Tool.from({
name: this.tools[i],
});
}
현재는 반복문을 돌며 엔티티 하나씩 반환하는게 아니라,
map을 사용해서 엔티티 리스트를 반환하는 형식으로 리팩토링했다.
큰 차이는 없지만 코드 가독성도 좋아진거 같다,,ㅎ
toToolEntities(): Tool[]{
return this.tools.map((toolName) => Tool.from(toolName));
}
또한 기존에는 아래 코드 처럼 반복문을 돌며 준비물을 저장하고 준비물에 프로그램을 할당하는 방식으로 작성했었는데,
// 준비물 저장
for (let i = 0; i < createProgramDto.tools.length; i++) {
const newTool = createProgramDto.toToolEntity(i);
newTool.program = newProgram;
newTool.academy = academy;
await this.toolRepository.save(newTool);
}
새로 리팩토링한 코드에서는 아래처럼 반환받은 엔티티 리스트를 프로그램에 할당하여 코드를 직관적으로 이해하기가 훨씬 좋아진것을 볼수 있다.
// 준비물 저장
const newTools = createProgramDto.toToolEntities();
await this.toolRepository.save(newTools)
newProgram.tools = newTools;
await this.programRepository.save(newProgram);
더 좋은 방식이 있다면 댓글로 지적해주시면 감사하겠습니다 :)
'JavaScript & TypeScript' 카테고리의 다른 글
[NestJS] iterable 객체 병렬처리 하기(feat.Bluebird JS) (1) | 2022.10.09 |
---|---|
[NestJS] class-validator를 사용한 필수값 체크(feat.다음 우편번호 API) (0) | 2022.10.08 |
[NestJS] DTO의 사용범위에 관한 고찰 및 리팩토링(feat.Layered Architecture) (4) | 2022.09.23 |
[NestJS] 이벤트 드리븐으로 기능 구현하기(feat.Event Emitter) (0) | 2022.09.18 |
[NestJS] 쿼리빌더를 사용한 코드 리팩토링 (feat.TypeORM) (0) | 2022.08.23 |