서버에서 설문조사에 필요한 정보를 받아와 정보를 토대로 UI를 그리고 입력 폼에 따라 알맞은 유효성 검사를 하고 문제가 없으면
통해 입력한 내용을 서버에 보내주는 설문조사 앱입니다.
├─ Subvey_Mission
│ ├─ Core // 가장 중요한 기능들을 모아놓은 디렉토리
│ │ ├─ Form // From 관련 기능들을 모아놓은 디렉토리
│ │ └─ Validate // 유효성 검사 관련 기능들을 모아놓은 디렉토리
│ │ ├─ ValidateError.swift
│ │ ├─ Validations // 각종 유효성 검사를 진행하는 클래스 디렉토리
│ │ └─ Validators // 유효성 검사를 모아서 작업 할 수 있도록 하는 클래스 디렉토리
│ ├─ Entity // 설문 조사 관련 데이터 디렉토리
│ ├─ Error // 네트워크 에러와 관련된 디렉토리
│ ├─ Network // 네트워크 작업 관련 디렉토리
│ ├─ Page
│ │ ├─ Home
│ │ │ └─ Controller
│ │ └─ Question
│ │ ├─ Controller
│ │ ├─ View // 설문 조사화면에 필요한 View의 디렉토리 ( 글자타입 설문 뷰, 체크타입 설문 뷰 등등 )
│ │ └─ ViewModel
│ └─ Utils // 각종 도움을 주는 함수와 클래스 디렉토리
│ └─ Extension
├─ doc // 구현 설명 문서 디렉토리
└─ mock // API Json 파일 디렉토리
sequenceDiagram
participant VM as QuesionViewModel
participant VC as ViewController
participant QV as QuestionView
VC ->> VM: 설문 내용 요청
note left of VM: 서버에 데이터 요청
loop
VM ->> VC: 질문 폼 전달 , 실패시 에러 전달 및 에러뷰 띄우기
VC ->> QV: 전달 받은 폼 전달
note right of QV: 사용자가 다음 버튼 클릭시 Validation 체크
QV --> VC: Validation 성공시 VC에게 설문 응답 전달
VC --> VM: Form 질문 대답 내용 전달
note left of VM: 질문내용 저장
break 만약 질문이 없을 경우
note left of VM: 총 질문 대답 서버에 전달, 다음 설문이 필요한 경우 새로운 설문 요청
end
end
Postman의 목업 서버를 사용하여 구현함
기본설문조사 API URL
추가설문조사 API URL
- 애니메이션을 통한 화면전환
- Json 형식에 따라 다른 UI가 보이도록 구현
- Validation 기능 구현
- Form의 내용에 따라 다른 Validate 구현
- Feat: 새로운 기능 추가
- Fix: 버그 수정
- Doc: 문서 수정
- Style: 들여쓰기, 줄바꿈 등등 코드 변경이 없는 경우
- Refactor: 코드 리펙토링
일단 다양한 타입이 올 수 있다는 것이 디코딩 작업을 하는 것도 생각보다 복잡하다고 느껴졌다.
또한 각자 타입에 맞는 Validate를 해주고 다시 그려야 하다보니 굉장히 많은 조건문이 생기는 문제가 발생했다.
Validation을 생성 하는 것은 팩토리 패턴으로 어떻게 구현할 수 있을지 고민을 하고 있는 중이다.
또한 라이브러리를 따라하지 않으려고 억지로 뷰안에 Validator를 넣어서 뷰안에서 Validate를 하는 작업을 하였는데 좋지 않은 방법이였다.
뷰 안에서는 값만 가지고 있고 그 값을 ViewController에서 버튼 클릭시 가져오는 방식으로 구현 했으면 View안에서는 뷰 전환만 하는 방법이 있었지 않을까 싶다.