A-APT/DuckBox-Android

투표와 설문 데이터 통합 구조 정의

Closed this issue · 2 comments

홈과 커뮤니티, 검색 화면에서 투표와 설문이 섞인 리스트가 보여지게 되는데, 투표와 설문의 Dto가 달라 이를 하나의 API로 결과를 반환해 보여지는 것에 어려움이 있었습니다. 이를 해결하기 위한 방안은 다음의 2가지가 존재합니다.

  • UI를 투표와 설문을 구분하는 형식으로 변경

    투표와 설문을 구분하는 토글과 참여 여부를 확인하는 토글 2가지가 존재할 경우, 사용자에게 혼동을 줄 수 있습니다.

  • 투표와 설문의 공통 DTO를 새롭게 생성

    화면에 보여지는 투표와 설문의 공통 값 DTO를 새로 생성하고, 상세 화면으로 이동할 때 투표 혹은 설문의 특성에 따라 보여주는 양식을 변경합니다.

(23.08.16 내용 수정- Entity와 DTO 개념)

마지막 방법인 투표와 설문 리스트를 위해 두 DTO를 통합하는 것으로 결정했습니다. 첫번째 방법은 사용자 혼동을 불러일으킬 수 있으며, 자원 낭비가 발생할 수 있다고 판단하여 마지막 방법을 채택했습니다. 변경된 데이터 구조는 다음과 같습니다.

image

투표와 설문의 가장 큰 차이점은 질문의 개수입니다. 투표는 하나의 질문으로 고정되어 있고, 설문은 여러 개의 질문을 하나의 설문에서 진행할 수 있습니다. 따라서 해당 Dto가 투표일 경우 questions 배열의 크기는 1입니다.

두 Entity 를 통합하는 것이 아닌, 두 Entity 를 통합해서 보여줄 수 있는 DTO 인 OverallDetailDto 을 사용하는 것으로 결정한 것입니다!

즉, 작성해주신 2, 3번째 방법과 최종적으로 결정한 방법은 다음과 같을 것입니다.

  • 리스트에서는 투표/설문을 같이 보여주고, 클릭하면 세부 정보를 서버에서 받아오기 (VoteDetailDto, SurveyDetailDto)
  • 투표와 설문 Entity 를 통합: 부가적인 작업이 필요하고, 엄밀히 말하면 두 entity 는 특성이 다르기 때문에 android 에서의 view 를 위해 이걸 통합하는 것은 불필요하다고 판단
  • 투표와 설문을 함께 표현할 수 있는 DTO 정의하고 사용: 홈 화면 등에서 두 정보를 함께 받아와서 표현할 수 있음
    Android 는 한 DTO 로 처리할 수 있어서 코드가 간단해지고, 서버는 간단한 작업만 추가하면 됨

마지막 방법이 해당 시점에서 가장 적합하고 작업 오버헤드가 작을 것으로 판단해서 채택했습니다.

(아마 작성하신 부분도 이와 의도는 비슷하겠지만 Entity 와 DTO 는 달라서 개념적으로 혼동이 올 수 있다고 생각해서 추가적으로 이 내용을 작성해둡니다.)