MVVM에서 VIP로 프로젝트 구조 변경
MVVM
MVVM 구조 선택 이유: View가 방대해져서 그 안에서 로직을 처리하는 것이 불편하기 때문에 ViewModel을 통해 View와 비즈니스 로직 분리하여 의존성 분리 하기 위함이였으나 Combine, RxSwift 등의 기술을 사용하는 reactiveness가 필요 없는 퓨어스위프트에 적용하는 것에는 장점이 없다고 판단.
VIPER:
모든 사용자 액션, 모델 업데이트, 라우팅이 presenter를 통하고, 그래서 presenter는 scene의 모든 구성 요소에 대한 참조를 갖기 때문에 간단한 단방향 제어 흐름 대신 모든 참조에서 메서드를 호출하기가 매우 쉬워진다는 단점이 있다.
VIP cycle로 인해 interactor에 있는 클로저 기반 비동기 메소드들이 주기적으로 업데이트를 제공할 수 있어서 Combine 등이 필요없고 VIP주기는 단방향 제어 흐름을 제공하여 VIPER의 제어 흐름 문제를 해결할 수 있다는 장점이 있습니다.
단점:
ViewController - Model(request) - Interactor - Model(response) - Interactor - Presenter - ViewModel - ViewController
Reference to property 'router' in closure requires explicit use of 'self' to make capture semantics explicit
reference.
https://www.kodeco.com/29416318-getting-started-with-the-vip-clean-architecture-pattern
[iOS - swift] Clean swift (VIP) 패턴 (기본 개념)
https://eunjin3786.tistory.com/165
https://github.com/Clean-Swift
https://github.com/GeekTree0101/RxCleanSwift