本プロジェクトでは Clean Swift をベースとした Clean Architecture を採用しています。
Clean Swift は View / ViewController / Interactor / Worker / Presenter / Model / Router から構成されたアーキテクチャです。
各関係性は次の通りです。
iOSアプリの見た目を表現します。
ViewController の責務は下記の通りです。
Interactorに具体的な処理内容(表示ロジック)を問い合わせるPresenterからの指示を受けて、最適なViewを描画するRouterに画面遷移を依頼する
Interactor の責務は下記の通りです。
WorkerとPresenterを仲介する- どんな条件で、
Workerに何の処理を依頼するのかハンドリングする Worker経由で取得したレスポンスをPresenterに渡す
Worker の責務は下記の通りです。
API処理やCore Data/Realmなどのアプリ内ローカルデータの処理をハンドリングする- 成功/失敗レスポンスをハンドリングする
Presenter の責務は下記の通りです。
- 受け取ったレスポンスを元に最適な表示(成功/失敗などの表示)になるようハンドリングする
- 受け取ったレスポンスを
Model.ViewModel形式に変換する ViewControllerにModel.ViewModelを渡して描画を依頼する
Model の責務は下記の通りです。
- 各種コンポーネントを切り離し、各種コンポーネント間のやり取りに利用される
Request/Response/ViewModelの3つの構造体を持つ
3つの構造体の説明:
Request- ユーザの操作をInputパラメータとして内包したデータ形式
ViewControllerから Interactor に渡される
ResponseWorker処理結果を内包しているデータ形式InteractorからPresenterに渡される
ViewModelViewControllerでの描画に即したデータ形式PresenterからViewControllerに渡される
画面遷移の責務を持ちます。
CleanFoodLogger
├── Models
├── Scenes
│ ├── MapView
│ │ ├── MapViewInteractor.swift
│ │ ├── MapModels.swift
│ │ ├── MapPresenter.swift
│ │ ├── MapRouter.swift
│ │ ├── MapViewController.swift
│ │ └── MapWorker.swift
│ └── RestaurantInformation
├── Services
├── Views
├── Workers
└── Resources
