Clean Architecture에 관한 간략한 정리
- 안쪽 레이어에 있는 애들은 바깥 레이어에 있는 것들을 몰라야 한다.
- 안쪽 레이어에서 바깥쪽에 의존하지 말아야 한다.
Domain Layer - Business Logic
- 가장 안쪽에 있는 Layer이다.
- 다른 레이어의 어떤 것도 포함시키면 안된다.
- Entities(Business Models), Use Cases, and Repository Interfaces를 포함한다.
- UseCases는 Repository Interfaces의 메소드를 실행시킨다.
- 다른 프로젝트에서도 재사용될 수 있다.
- 혼자서만 존재한다.(isolated) → 테스트를 하기에 매우 용의하다.
Presentation Layer - MVVM
- UI(UIViewController / SwiftUI Views)
- 각 뷰들은 하나 이상의 Use Case를 실행시키는 View Model과 각각 대응한다.
- ViewModel은 UseCase를 가지고 있어서 해당 UseCase의 메소드를 실행시킨다.
- Domain Layer에만 의존적이다.
Data Layer - Data Repositories
- Repository Implementations(Domain Layer의 Repository의 구현 부) + Data Sources
- 데이터를 가공한다.
- Network JSON Data 매핑하는 로직이 들어간다.
- Domain Layer에만 의존적이다.
Infrastructure Layer
- Network Layer의 wrapper이다.
- 실제 network 호출을 하는 부분이다.
구성요소
Presentation Layer (MVVM) = ViewModels(Presenters) + Views(UI)
Domain Layer = Entities + Use Cases + Repositories Interfaces
Data Repositories Layer = Repositories Implementations + API(Network) + Persistence DB
Data Flow
- View가 ViewModel(Presenter)의 메소드를 호출한다.
- ViewModel이 Use Cases를 실행한다.
- Use Case가 User와 Repository에서 데이터를 가져온다.
- 각각의 Repository가 Network나 DB를 통하여 데이터를 return한다.
- 다시 UI에게로 flow가 흘러나간다.
MVVM
- Presentation layer를 구현하는 여러 디자인 패턴 중 하나!
- UI와 도메인의 관심사 분리를 깔끔하게 해준다.
- ViewModel에서 UI와 관련된 프레임워크를 import하지 않는다.(ex. UIKit, SwiftUI)
(+DI 컨테이너 관련된 내용은 추후에 추가할 예정입니다.)