Skip to content

Latest commit

 

History

History
77 lines (57 loc) · 2.48 KB

생경한 코드를 보고 느낀 점.md

File metadata and controls

77 lines (57 loc) · 2.48 KB

< 뒤로가기

생경한 코드를 보고 느낀 점

본 프로젝트의 코드는 전부 클래스로 구성되어 있습니다.

@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