Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[둘리] 3, 4단계 영화 극장 선택 제출합니다. #31

Merged
merged 90 commits into from
May 9, 2023

Conversation

hyemdooly
Copy link

안녕하세요, 리뷰어님!
이번 미션 요구사항이 대부분 처음 해보는 것들이라 까다로웠습니다.
MVP에서 Presenter의 역할이 어디까지인지 어렵네요.🥲 MVP를 고민하는데 가장 많은 시간을 사용한 것 같습니다.
이번 제출 코드에 도메인의 변경사항이 많아 핵심 변경 사항의 설명을 함께 첨부합니다!

코드 설명 - 도메인

Schedule

  • key : 극장 이름, List : 극장이 영화를 상영하는 시간 리스트
    Movie의 프로퍼티에 Schedule을 추가하여, 극장이 그 영화를 몇 시에 상영하는지 정보를 담았습니다.

SeatInfo

  • size : row, col
  • gradeOfRow : 각 열의 등급 정보
    Theater 클래스에 프로퍼티로 포함되어 있습니다.
    액티비티에서 사용할 때는 색깔 정보도 필요하기에, toUiModel로 등급별 색깔 정보를 받아 변환할 수 있습니다.

Theater

  • name : 극장 이름, seatInfo : 좌석 정보, discountPolicies: 할인 정책 리스트
    각 극장별로 할인 정책이나 좌석 정보가 달라지더라도 대응할 수 있도록 클래스를 생성하였습니다.

ScreeningDateTimes

ReservationActivity에서 사용하는 클래스로, 기존 코드에서는 Movie에 포함되어 있었으나 극장에 따라 시간대가 달라지게 되면서 분리하였습니다.
극장 선택 후에 팩토리 함수를 사용하여 그 극장의 상영 시간에 맞는 LocalDate - List Map을 생성합니다.

System

  • SeatSelectSystem : 좌석을 선택 후 결과(SelectResult)를 리턴하는 클래스
  • PriceSystem : 기존 가격과 좌석 선택 결과를 받아 현재의 가격을 리턴하는 클래스

사용자가 영화와 극장을 선택하면 ScreeningDateTimes를 생성하여 Spinner에 값을 세팅합니다.
정보를 입력한 후 좌석 선택 화면으로 넘어가면, ReservationOptions의 theaterName, TheaterRepository를 사용하여 극장의 정보를 가져옵니다. 이 정보를 이용하여 좌석을 그리고(뷰 동적 생성) SeatSelectSystem, PriceSystem을 생성합니다.
확인 버튼을 누르면 다이얼로그를 띄우고, 예매 완료 버튼을 클릭하면 DB에 저장 후 예매 완료 화면으로 이동합니다.
예매 완료 화면에서는 권한 체크, 허용되어있는 경우 알람을 세팅합니다.


질문

  1. Presenter의 역할은 어디까지인지 어렵습니다. 특히 뷰의 값을 초기 세팅하는 것도 Presenter의 역할일까요?
    Repository에서 데이터를 가져오는 것은 비즈니스 로직이라고 생각하여 분리했는데, 단순히 값을 가져오고 리턴하는 것은 Presenter의 역할이 아닌 것 같다는 느낌이 듭니다.
    그렇다고 하여 View에서 각 요소마다 Set함수를 작성하자니 코드가 자잘하게 길어지는 것 같습니다.
  2. 그동안 LocalDateTime Format이나, joinToString() 등 연산을 한 후에 뷰에 값을 세팅해주는 경우가 꽤 있었는데요. 데이터 바인딩을 적용하면서 이런 연산을 한 후에 세팅해야하는 경우 어떻게 해야하는지 잘 모르겠습니다. 간단한 String Format은 xml에서도 가능한데 말이죠...
    지금 당장 생각나는 것은 각 뷰마다 ViewModel을 생성해준다, BindingAdapter를 생성하여 커스텀한다. 두 가지 방법인데요.
    각 뷰마다 ViewModel을 일일히 작성해주자니 UiModel 클래스들의 존재 이유가 불명확해지는 것 같고, 커스텀 어댑터를 생성하자니 코드가 괜히 길어지는 것 같습니다.
    이 외에는 방법이 없는걸까요? 보통 이런 경우에 어떻게 작성하나요?

Copy link

@laco-dev laco-dev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

피드백 반영 고생하셨습니다.

몇 가지 간단한 의견을 추가로 남겨두었습니다. 💪🏻

Copy link

@laco-dev laco-dev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

피드백 반영 고생하셨습니다.

몇 가지 간단한 의견을 추가로 남겨두었습니다. 💪🏻

Copy link

@laco-dev laco-dev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이번 미션도 고생 많으셨습니다.
지금까지 잘 해주신 것 처럼, 선택과 집중을 통해 많은 것을 얻어 가셨으면 좋겠습니다.

@laco-dev laco-dev merged commit cc52911 into woowacourse:hyemdooly May 9, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants