개인개발 iOS 애플리케이션을 위한 아키텍처에 관한 한 고찰

소개



최근 개인 개발 iOS 앱의 아키텍처를 생각할 때 MVC, MVVM, ReSwift, Clean Architecture 등의 Qiita 기사가 매우 도움이 되었습니다.

감사의 뜻을 담아 하나하다 승월하면서 성과를 피드백하겠습니다.

가치관



  • MVC/MVP/MVVM의 단순성은 개인 개발 목적이라면 좋을지도
  • Fat ViewController는 이미
  • UnitTest 가능한 범위를 늘리고 싶습니다
  • 그러나 Clean Architecture, VIPER 및 ReSwift는 조금 무거운


  • ViewModel에서 View로의 일방통행 DataBinding은 좋다
  • RxSwift, ReactiveSwift, Bond 등, 무엇을 할지 망설임
  • 외부 라이브러리에 의존하고 싶지 않다.
  • 한 방향으로 학습 비용이 낮고 큰 효과를 기대할 수 있습니다.


  • ReSwift의 dispatch 아이디어는 좋다.
  • 개발하고 싶은 앱은 화면 수 3으로 화면 전환도 적지만 화면이 복잡
  • 부모 ViewControllerr:1
  • 자식 ViewControlller:4

  • 자식 ViewController 이벤트를 부모 및 다른 자식에게 알리고 싶습니다.
  • 부모와 자식 이벤트를 한 곳에 집계하면 실행 로그를 쉽게 볼 수 있습니다.


  • 완성된 아키텍처



    레이어



    ExternalLayer와 InternalLayer의 2층
  • ExternalLayer는 Clean Architecture의 가장 바깥 쪽 이미지입니다
  • InternalLayer는 Clean Architecture의 Contollers, Use Case, Entity의 이미지입니다.

    ViewController는 이 그림의 View에 속합니다.
    MVC 모델의 V와 C가 view에 대응하고, M이 UseCase/ViewModel/Actor에 대응하는 이미지입니다.


    처리 흐름



    ①View는 사용자로부터의 입력을 접수하면 Dispatcher에게 이벤트를 통지한다.
    ② Dispatcher는 이벤트를 적절한 UseCase에 매핑한다.
    ③UseCase는 Actor에게 데이터 갱신 Action을 의뢰한다.
    ④ Actor는 데이터 갱신 처리를 행한다.
    ⑤UseCase는 ViewModel에 데이터 갱신 통지를 한다.
    ⑥ViewModel은 Actor에게 데이터 참조 액션을 의뢰하여 자신에게 반영한다.
    ⑦ View는 구독하고 있는 ViewModel의 값을 자신에게 반영한다.
    ⑧ View는 갱신된 화면을 사용자에게 표시한다.

    View 책임


  • 사용자 입력 및 시스템 이벤트를 Dispatcher에 알립니다
  • ViewModel을 구매하고 ViewModel의 값에 변화가 있으면 화면에 반영한다

  • UseCase의 책임


  • View에 이벤트 통지 인터페이스 제공
  • func dispatch(from:, event:)

  • 사용 사례(데이터 업데이트 작업) 수행
  • 유스 케이스의 실태는 어느 액터에게 어떤 액션 어느 순서로 의뢰할지를 결정한 것

  • 업데이트 결과를 화면에 반영하기 위해 ViewModel에 알립니다.

    Actor의 책임


  • UseCase나 ViewModel에, 액션 제출의 인터페이스를 제공한다.
  • 데이터 업데이트 작업 및 데이터 참조 작업을 수행합니다.

  • 서비스 인터페이스의 책임


  • Actor에게 ExternalLayer의 API를 숨기는 인터페이스를 제공한다.

  • ViewModel의 책임


  • UseCase에 데이터 갱신 통지의 인터페이스를 제공한다.
  • Actor에게 데이터 참조를 요청하고 결과를 자신에게 반영한다.

  • 결론



    누군가의 도움이 되면 다행입니다!

    매우 공부가 된 기사



    Redux+Rx를 활용한 iOS 앱 아키텍처

    【고찰】iOS 개발에 있어서 MVVM(RxSwift)은 정말로 MVC보다 좋은 선택지가 될까

    좋은 웹페이지 즐겨찾기