본 프로젝트의 코드는 전부 클래스로 구성되어 있습니다.
@unchaptered 님과 처음으로 함께 협업하면서 겪어보지 못한 코드 구성이 많았습니다.
기존의 바닐라 자바스크립트로만 작성해보고 레이어드 아키텍처 3계층
을 접한지 얼마 안 된 시점에서 DTO나 Provider의 존재는 생경했습니다.
// comment.controller.js
const {
PostCommentDto,
GetCommentDto,
UpdateCommentDto,
DeleteCommentDto,
} = require('../../models/_.loader');
class CommentController {
formProvider;
joiValidatorMusic;
commentService;
constructor() {
this.joiValidator = new JoiValidator();
this.formProvider = new FormDtoProvider();
this.commentService = new CommentService();
}
Controller
, Service
, Repository
과 같은 계층형 아키텍처 외에도 DTO
, formProvider
, joiValidator
같이 비슷한 기능들을 모아놓은 것들을 모듈화
해서 사용할 수 있다는 걸 알게 되었습니다.
예외 처리 역시 마찬가지입니다.
// custom.exception.js
class CustomException extends Error {
name;
message;
statusCode;
constructor(message, statusCode = 500) {
super(message);
this.name = 'CustomException';
this.message = message;
this.statusCode = statusCode;
}
}
/**
* @property statusCode 401
*/
class BadRequestException extends CustomException {
constructor(message) {
super(message);
this.name = 'UnauthorizedException';
this.statusCode = 400;
}
}
에러가 날 수 있는 경우의 수를 한 데 모아 모듈화를 진행했습니다. 대부분의 에러는 위의 코드로 캐치합니다. 각 계층에서 통용되므로 클래스를 통한 확장성
을 체감할 수 있습니다.
하나의 메서드는 하나의 기능만을 가지고, 하나의 클래스는 하나의 책임만을 진다.
객체 지향 프로그래밍은 개발을 하면서 수도 없이 접할 수 있는 표현이지만, 왜 클래스인가에 대한 당위성은 위의 문장에서 느낄 수 있을 것입니다. 클래스를 사용하면 코드의 독립성을 보장 받아 유지보수가 용이한 것과 동시에, 기능 적인 측면에서는 사용성 및 확장성을 가진다고 볼 수 있습니다.
- 작성자 : @waveinyu
- 작성일자 :
2022-08-18