Architecture + Design Pattern

Clean Architecture + MVVM

iosswift 2022. 10. 3. 23:56

모바일 software engineering 에서 가장 많이 사용하는 architectural patterns 는 MVVM, Clearn Architecture, Redux pattern 이 있다. 이번 글에서는 MVVM 과 Clearn Architecture 가 iOS App 에서 어떻게 적용되는지 살펴볼 것이다. 

 

Clearn Architecture 에서 가장 중요한 규칙은 안쪽 layer 에서 바깥쪽 layer 로 dependencies 가 향하지 않는 것이다. 즉 안쪽에서는 바깥쪽에 대한 정보를 몰라야 한다.

 

모든 Layers 를 그룹으로 나누어보면 Presentation, Domain and Data layers 이렇게 세개로 구성할 수 있다. 

 

Domain Layer (Business logic)는 가장 안쪽 원이다. Entities(Business Models), use cases, 그리고 Repository Interfaces 를 갖는다. 다시 말하자면, Domain Layer 는 바깥 layer 에 대한 어떠한 것도 아는 상태이면 안된다.

 

Presentation Layer 는 UI (UIViewController)  를 가지고 있다. View 들은 하나 혹은 다수의 Use Cases 를 다루는 ViewModels (presenter) 에 의해 다루어진다. Presentation Layer 는 Domain Layer 에만 의존한다. 

 

Data Layer Repository 구현과, 하나 이상의 Data Sources 를 포함한다. Repositories 는 Data Sources 로 부터의 data 를 다룬다. Data Source 는 Remote 이거나 Local (CoreData 등) 일 수 있고, Data Layer 또한 Domain Layer 에만 의존한다.

 

Data Flow

1. View 는 ViewModel 의 함수를 호출한다. 

2. ViewModel 은 그에 따른 Use Case 로직를 처리한다. 

3. Use Case 는 User 와 Repositories 에서의 Data 를 조합하여 처리한다. 

4. 각 Repository 는 외부 또는 내부 데이터를 가져온다. 

5. 처리된 정보가 다시 View(UI) 방향으로 이동한다. 

 

(Dependency Rule역방향 흐름은 protocol - delegate 을 통해 일어난다. )

Dependency Direction

Presentation Layer -> Domain Layer <- Data Repositories Layer

Presentation Layer (MVVM) = ViewModels(Presenters) + Views(UI)

Domain Layer = Entities + Use Cases + Repositories Interfaces

Data Repositories Layer = Repositories Implementations + API(Network) + Persistence DB

 

 

 

 

출처: https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3