https://github.com/SpartaCoding-iOS05-i/PokeContact/pull/14
MVVM-C 아키텍처를 도입하여 개발했는데, 도중에서부터 구조가 잘 이해가 안되고 꼬이게 됨.
그에 따라 여러 가지 문제점이 생겼고, 이들을 파악하여 고치는 것도 쉽지 않게 됨:
- Add한 Contact가 MainViewController로 돌아갔을 때 보이지 않음 (CoreData에 데이터 저장은 되고 있음)
- MainViewController에서 Add를 눌렀을 때 이미지가 자동으로 생성되지 않음
- MainView에서 보여주고 있는 Table에서 image를 "star"가 아니라 데이터에 있는 실제 데이터를 보여줘야됨
- Generate Avatar 버튼(didTapGenerate)를 눌렀을 때 아래와 같은 오류가 뜸
- Synchronous URL loading of https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/702.png should not occur on this application's main thread as it may lead to UI unresponsiveness. Please switch to an asynchronous networking API such as URLSession.
현재 구조를 간단한 도식을 그리며 면밀하게 살피고, 개선이 필요한 구조를 파악해보았다
파악한 문제점:
DetailViewModel
과DetailViewController
인스턴스는MainCoordinator
가 아닌DetailCoordinator
에서 생성해야 함pokemonFetcher
도MainCoordinator
에서 한 번 더 생성하는 게 아니라AppCoordinator
에서 생성한 걸 의존성 주입으로 가져오는 게 낫겠음
구조 개선 후 새로 그린 도식이다.
ImageLoader
는 원래 있던 기능이지만 파일을 따로 분리하였고,
Coordinator
, PokemonResponse
, ContactCell
, RoundImageView
는 원래 있던 파일이지만 도식에 추가하였다:
구조를 개선하면서 중복되는 코드를 크게 줄일 수 있었고, 자연스럽게 버그의 원인도 드러나서 쉽게 해결할 수 있었다.