This is iOS App for practice VIPER architecture.
Sorry, since this time README support only Japanese.
これはiOSアプリにおけるVIPERアーキテクチャの実装の一例です。
単一責任の原則に則ったアーキテクチャです。
UI(ViewController/View/Activity/Controller etc.)を主に担保します。
基本的にPresenterの呼び出し、OutputDelegateから渡ってきた値をUIに反映させることだけに注力します。
ビジネスロジックを担います。
UIとは完全に引き剥がされているので、我々が解決したい問題に集中して取り組めます。
Repositoryパターンを併用して、Remote/Localからデータ取得/保存する処理を分割すると更に取り組みやすくなるでしょう。
ViewとInteractorの橋渡し的役割を持ちます。UIロジックはここに。
Interactorから受け取ったデータをViewに伝えられるようにデータ変換したり、それをViewに伝搬したりします。
アプリケーションで扱われる意味を持ったデータのまとまり、またはペイロードの役割を担います。
VIPER的にはEntityを知っているのはInteractorのみになります。
このサンプルアプリではView/PresenterもEntityを知っている状態になっています。何か良い手段 or このままでも良い等のアドバイスをお待ちしております。
モジュール間のルーティングと依存関係の解決を担います。
所謂DIはここで。Presenterから呼び出され、別モジュールへの遷移ロジックを持ちます。
- SRPに則っているので、バグの解明が比較的容易にできます。
- 新しい機能追加が容易にできます。
- 各コンポーネント同士が疎結合なので再利用性が上がります。
- UIロジックとビジネス(ドメイン)ロジックが分離しているのでユニットテストが容易にできます。
Xcode 10.1
Swift 4.2.1
macOS Mojave