LoginSignup
8
4

More than 5 years have passed since last update.

個人開発iOSアプリケーション向けアーキテクチャーに関する一考察

Last updated at Posted at 2018-10-22

はじめに

最近、個人開発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のイベントを、親や他の子に通知したい
    • 親や子のイベントを1箇所に集約すれば、実行ログが見やすくなるのでは

出来上がったアーキテクチャ

レイヤー

ExternalLayerとInternalLayerの2層

  • ExternalLayerは、Clean Architectureの一番外側のイメージ
  • InternalLayerは、Clean ArchitectureのContollers, Use Case, Entityのイメージ

ViewControllerは、この絵のViewに属します。
MVCモデルのVとCがviewに対応して、MがUseCase/ViewModel/Actorに対応するイメージです。
DuotingZ_アーキテクチャ.001.jpeg

処理の流れ

①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に、アクション実行依頼のインタフェースを提供する。
  • データ更新アクション、およびデータ参照アクションを実行する。

Service Interfaceの責務

  • Actorに、ExternalLayerのAPIを隠蔽するためのインタフェースを提供する。

ViewModelの責務

  • UseCaseに、データ更新通知のインタフェースを提供する
  • Actorにデータ参照依頼して、結果を自身に反映する。

おわりに

どなたかのお役に立てたら幸いです!

大変勉強になった記事

Redux+Rxを活用したiOSアプリアーキテクチャ

【考察】iOS 開発において MVVM(RxSwift)は本当に MVC よりいい選択肢になるか

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4