개발요구사항
- 요금 정책에 따라 요금을 계산해주는 API제작
- 할인 조건
ex. 사용자가 파킹존에서 반납하는 경우 요금의 30%를 할인해주며, 사용자가 마지막 이용으로부터 30분 이내에 다시 이용하면 기본요금을 면제해줍니다. - 그 외 여러 조건들...
- 기능을 유지한 채로 새로운 할인이나 벌금 조건이 쉽게 추가될 수 있게 코드를 개선
개발과정
- 과제분석을 통해 요금조건이 다양하고, 추가와 제거의 가능성이 많으며 조건의, 적용순서도 변경될 여지가 많다는 특징을 확인했다.
- 고민을 거쳐 책임연쇄패턴이 가장 적합해보였기에 이를 적용하기로 했다.
src/libs/costCalculator/ 폴더 내의 클래스 다이어그램
- CostChainBase는 Chain을 추상화한 인터페이스의 용도로 만들었다. 다만, 자바스크립트는 Duck Typing으로인해 인터페이스 개념이 존재하지 않으므로 어쩔 수 없이 클래스 상속을 이용했다.
- ConcreteChain클래스들은 CostChainBase를 상속하여 구체화된 클래스들이다. calculateCost 메소드를 통해 각자의 요금조건을 계산하고 goToNextChain을 통해 다음 체인으로 넘긴다.
- CostChainManager는 체인연결, 데이터 전처리 등 종합적으로 체인을 관리하는 클래스이다. addChain으로 체인을 추가하고 최종적으로는 이 클래스의 calculateCost 메소드를 호출하여 요금을 계산한다.
CostChainBase 실제 코드
CostChainManager 실제 코드
- 추가적으로 다른 부분과의 의존성을 낮추기 위해, node.js의 index.js파일 모듈 기능을 이용해 독립적인 폴더로 구분하기로 했다.
/src/libs/costCalculator/index.js 파일의 내용실제 사용 예
const costCalculator = require('../libs/costChains'); let finalCost = await costCalculator.calculateCost(historyId);
- 위와 같은 설계를 통해 요금조건의 추가, 삭제, 순서변경 등의 변화에 있어서 기존코드의 변경을 최소화 할 수 있었다.
- SOLID원칙들 중 기능의 확장에는 열려있고 기존 코드의 변경에는 닫혀있는 Open-Closed 원칙을 만족할 수 있었습니다. SOLID의 일부 다른 원칙 또한 만족하는 것으로 보인다.
마치며
- 이번엔 과제가 설계에 집중하는 걸로 보여서 상기한 패턴외에도 코드리뷰와 리팩토링을 통해 가독성 개선, 서비스 모듈의 책임분리 등의
작업또한 진행했다. - 이제 2개의 과제만 남았으니 막판 스퍼트로 달려봐야겠다 :)
'생존신고 하기 > 위코드 프리온보딩' 카테고리의 다른 글
위코드 프리온보딩 백엔드 과정 - 회고 4주차 마지막 (카닥) (1) | 2021.11.28 |
---|---|
위코드 프리온보딩 백엔드 과정 - 회고 3주차 1회 (휴먼스케이프) (0) | 2021.11.15 |
위코드 프리온보딩 백엔드 과정 - 회고 2주차 2회 (8퍼센트) (0) | 2021.11.12 |
위코드 프리온보딩 백엔드 과정 - 회고 2주차 1회 (레드브릭) (0) | 2021.11.10 |
위코드 프리온보딩 백엔드 과정 - 회고 1주차 2회 (프레시코드) (0) | 2021.11.06 |