-
헥사고날 NestJs, TypeOrm dto type 리펙토링공부하기/node.js 2023. 2. 26. 19:18
간단한 설문조사 프로젝트를 만들던 중 문득 의문이 들었다.
의문
- 인바운드 포트와 아웃 바운드 포트의 인풋, 아웃풋이 같은 경우가 상당히 많은데 구지 똑같은 타입을 여러개 선언할 필요가 있을까??
- TypeOrm을 사용하기 때문에 엔티티의 클래스와 TypeScript의 유틸리티 타입을 사용하면 유지보수 측면에서 더 좋지 않을까?
리펙토링 도전
before
survey/out-port/survey-findone.op.ts
인바운드 포트, 아웃바운드 포트의 output 타입은 같습니다. export type SurveyFindOneOutPortOutputDto = { id: number; name: string; description: string; question: Array<{ id: number; question_number: number; text: string; type: string; survey_id: number; created_at: Date; updated_at: Date; option: Array<{ id: number; question_id: number; option_number: number; text: string; created_at: Date; updated_at: Date; }>; }>; };
after
survey/types/index.ts
// 인바운드 포트, 아웃바운드 포트의 값이 같은 경우 이곳에서 관리 import { Survey } from '../survey.entity'; export type SurveyFindOneInPut = number; export type SurveyFindOneOutPut = Omit<Survey, 'created_at' | 'updated_at'>;
survey/out-port/survey-findone.op.ts
import { SurveyFindOneInPut, SurveyFindOneOutPut } from '../types'; export type SurveyFindOneInPortInputDto = SurveyFindOneInPut; export type SurveyFindOneInPortOutputDto = SurveyFindOneOutPut; ...
- survey 모듈 내부에 types 디렉토리를 생성하고 인바운드 포트와 아웃바운드 포트의 인풋값, 아웃풋값이 같을 경우 types 파일 내 타입을 정의하고 인바운드 포트와 아웃바운드 포트는 types에 선언된 타입을 import하여 사용한다.
- Survey 엔티티 타입과 타입스크립트 유틸리티 타입 Omit을 사용하여 공통 타입을 선언한다.
성과 :
- 공통되는 타입을 한곳에서 관리하므로 유지보수가 더 쉬워졌다.
- 평소 헥사고날 아키텍처의 단점으로 '코드량이 많다'라고 생각했었는데 중복되는 코드를 줄일 수 있었다.
'공부하기 > node.js' 카테고리의 다른 글
NestJs Cache 탐색 및 기록 (0) 2023.03.09 NestJs Swagger 문서 만들기 (0) 2023.03.02 NestJs Controller @Query Pipe 기록 (0) 2023.02.25 NestJs TypeOrm Exception (0) 2023.02.24 NestJs TypeOrm 엔티티 공통 컬럼 관리 (0) 2023.02.24