원티드 프리온보딩 백엔드 챌린지 사전과제
- 비즈니스 요구사항: 소극장에 입장하는 관객의 티켓을 확인하고, 만약 티켓이 없다면 구매 후, 입장을 시키고 티켓이 있다면 티켓 확인 후, 입장 시킨다.
- 문제: 위 "비즈니스 요구사항"에 맞게 개발된 Theater 패키지가 있다. 하지만, 실행은 잘 되지만 패키지에는 2가지 문제점을 가지고 있다.
- 코드를 읽는 사람이 코드(ex. 관람객의 상태나 행동)를 예측할 수 없다.
- 변경의 유연함을 토대로 확장성을 가지고 있지 않다.
- 과제
- Theater 패키지의 코드를 읽는 사람이 쉽게 이해할 수 있고 예측할 수 있도록 수정 해보자.
- 매일 변화하는 비즈니스 요구사항의 변경에 유연하고 기능 확장성을 가지는 코드로 수정 해보자.
- TheaterService의 enter() 비즈니스 로직이 정상 실행되는지 확인해보자.
- 관람객의 정보는 RequestMessage로 받아서 처리하자.
- 관람객은 초대권 티켓을 가지고 있을 수도 있고 없을 수도 있다.
- 비즈니스 요구사항: WantedCafe에서 아메리카노만 주문 및 결제가 가능한데, 다른 음료도 주문 및 결제가 가능하게 수정해주세요.
- 문제: 위 "비즈니스 요구사항"에 맞게 개발 완료 및 정상 실행은 되지만 확장성과 유지보수성이 낮다.
- 과제
- 현재 주문 가능한 음료는 오직 아메리카노뿐인데, 주문 가능한 음료의 수를 최대 3개까지 확장해보자.
- 각각의 객체들이 적절한 책임과 책임의 범위를 가지고 있는지 확인해보고, 너무 많은 책임과 넓은 범위의 책임을 가지고 있다면 적절하게 수정해보자.
- CafeService의 order() 비즈니스 로직이 정상 실행되는지 확인해보자.
- 주문할 음료와 수량은 RequestBody로 받아서 처리하자.
https://www.notion.so/23-09-23-09-9f17eff14f1d40448e59430d0a80eee2?pvs=4 리팩토링 과정 리팩토링 전 코드는 크게 두 가지 기능으로 영화관에서 관람객이 티켓을 구매하거나 초대권을 사용하여 입장, 카페에서 고객이 캐셔에게 음료 주문을 하여 바리스타가 주문을 바탕으로 음료를 만들어주는 기능을 하는 코드였다. 하지만 기능이 동작하는 것과 별개로 각 객체들이 너무 많은 범위의 책임을 가지고 있었고, 클래스 간의 관계가 강하게 결합되어있어 확장이 어렵고 코드를 읽는 사람이 객체의 상태와 행동을 예측할 수 없는 문제가 있었다.