저는 여태까지 API를 가지고 네트워크 요청을 할때
func requestMovies(page: Int, completion: @escaping ()->Void) {
URLSession.request(.....
}
이런식으로 특정 네트워크 요청을 위한 함수를 만들어서 요청하는 식으로 코드를 짜왔습니다. 또한 이런 네트워크 작업을 하는 객체를 싱글톤 객체로 만들어서 작업을 했지요.
class NetworkManager {
static let networkManager = NetworkManager()
func requestMovies() {
}
func requestUserInfo() {
}
.
.
.
}
이런식으로 말입니다. 이런 방식은 NetworkManager가 요청 생성, 인코딩, 디코딩 등등을 모두 담당하기에 단일책임 원칙도 위배하고, 네트워크 작업이 방대해질수록 오류를 찾기도, test하기도 어렵습니다. 그래서 네트워크 작업을 각각의 레이어로 분리 해 보다 쉽게 테스트를 하고, 책임을 분단시킵니다.
실제로는 이것보다 더 복잡하지만 간단하게 기능을 추리면 이런식으로 레이어를 나눠서 요청을 합니다.
'클린 아키텍처' 카테고리의 다른 글
클린아키텍처-클론코딩 (4) 영화 검색-1 (0) | 2022.10.15 |
---|---|
클린아키텍처-클론코딩 (3) MoviesList 페이지 DIContainer와 Coordinator 패턴을 이용해 띄우기 (0) | 2022.10.03 |
클린아키텍처-클론코딩 (2) UseCase Test (0) | 2022.09.24 |
클린아키텍처-클론코딩 (1) (1) | 2022.09.21 |
(클린 아키텍처-MVVM) Domain 계층의 Repository 패턴 (0) | 2022.09.17 |