ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Clean Architecture + MVVM
    Architecture + Design Pattern 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

    'Architecture + Design Pattern' 카테고리의 다른 글

    ReactorKit  (0) 2022.10.12
    MVVM  (0) 2022.09.26
    Clean Architecture  (0) 2022.09.25
    Delegate & Protocol  (0) 2022.03.28
    Architecture Patterns ( MVC, MVP,MVVM ) ( with iOS, Swift)  (0) 2021.10.21
Designed by Tistory.