[Typescript] builder 패턴 남용 금지Node.js2024. 4. 21. 18:03
Table of Contents
자바 계열에서 넘어오신 분들이 builder 패턴을 통해 인스턴스 생성 전략을 무분별하게 사용하는 경우가 있습니다. 만약, 인자가 많아 빌더패턴을 적용해야한다는 이유는 TypeScript에서는 적절한 이유가 되지 못합니다. TypeScript에서 named parameter 가능하기 때문에 인자가 많다는 이유로는 builder 패턴을 사용할 필요가 없습니다.
코드
interface UserProps {
nickname: string;
email: string;
role: UserRoleEnum;
deletedAt: Date | null;
}
export class User extends Entity<UserProps, UserID> {
private constructor(props: UserProps, id?: UserID) {
super(props, id);
}
static create(props: UserProps, id?: UserID) {
const isValid = Guard.againstNullOrUndefined([props.nickname, props.email]);
if (!isValid)
throw new UserRequestPropsNullOrUndefinedException('올바르지 않은 요청 구조입니다. 요청에 대한 구조를 확인해주세요.');
return new User(props, id);
}
get id(): UserID | undefined {
return this._id;
}
get nickname(): UserNickname {
return this.props.nickname;
}
get email(): UserEmail {
return this.props.email;
}
}
// 기본적인 사용방법
User.create({
nickname: raw.nickname,
email: raw.email,
role: raw.role,
deletedAt: raw.deleted_at,
});
//변수명과 속성명이 같다면 키 생략 가능
const [nickname, email, role, deletedAt] = ['puleugo', 'puleugo@gmail.com', UserRoleEnum.USER, null];
User.create({nickname, email, role, deletedAt});
'Node.js' 카테고리의 다른 글
괴물 메서드 리팩터링과 성능개선하기 | 안전하게 리팩터링하기 (0) | 2024.09.16 |
---|---|
[TypeScript] TypeORM 커스텀 함수 구현하기 (0) | 2024.06.06 |
[PostgreSQL] 내가 enum을 쓰지 않는 이유 (0) | 2024.04.14 |
PostgreSQL Check란? Check를 사용하지 말아야하는 이유 (0) | 2024.04.11 |
[NestJS] eslint를 작성해보자. (0) | 2023.08.23 |
@임채성 :: 푸르고 개발 블로그
글 내용 중 잘못되거나 이해되지 않는 부분은 댓글을 달아주세요! 감사합니다! 문의: puleugo@gmail.com