なぜ書いたか
これまでSwiftを使って色々アプリを作ってきましたが、
正直設計パターンというのをほとんど意識しませんした
基本的なMVCと言われるもので作ってましたが、そろそろまずいだろということで
ちょっと設計パターンについて勉強してみました。
本記事はアウトプット用のメモとなります。
MVCとMVPの違い
- MVC
- Model
- ドメインのモデルにあたる構造体を定義クラス
- View
- ViewControllerやTableViewCellクラスなど画面描画に関する処理を行うクラス
- Controller
- ViewControllerクラス ユーザーからの操作の検知やその後の画面変更を行うクラス
- MVP
- Model
- 上記同様 構造体を扱うクラス
- View
- ViewCotrollerクラス Uikitをインポートした画面描画に関する処理をまとめたクラス
- Presenter
- Presenterクラス Uikitをインポートしないデータを扱うクラス
MVPにおける各コンポーネントの責務
モデル | ビュー | プレゼンター |
---|---|---|
DB層と通信する | データをレンダリングする | モデルへのクエリを実行します |
適切なイベントの提起 | イベントを受け取る | モデルからデータをフォーマットする |
非常に基本的な検証ロジック | フォーマットされたデータをビューに送信します。 | |
複雑な検証ロジック |
引用:https://riptutorial.com/ja/ios/topic/9467/mvpアーキテクチャ
MVCのデメリット(一部)
MVCではViewControllerがViewとControllerを兼ねて処理している
→Step数が多くなり肥大化しやすい。
MVPによる対処法:Presenterクラスを用いてViewControllerクラスの処理をPresenterクラスに一部移動する。
MVPの恩恵
- ViewControllerのボリュームを抑えることができる。
- 可読性の向上
- クラスごとの責務がわかりやすい
- 保守性、静的テストのしやすさの向上
- 設計パターンを知っていれば、新規参入者でもわかりやすい構造
参考サイト
iOSアプリ設計大全集 2016
わかりやすくMVCやMVP、MVVMなどについてまとめられている
設計パターンの一覧を学ぶのに有用なサイト
PEAKS(ピークス)|iOSアプリ設計パターン入門
設計パターンの細かい説明だけでなく、設計とはという概念的な部分まで書かれた書籍
ネットで一部無料で見ることができる
iOSをMVC,MVP,MVVM,Clean Architectureで実装してみた
各設計パターンをメリットデメリットを上げてわかりやすくまとめられている
筋肉.swiftアプリをMVPパターンで実装(しようと)してみて感じたこと
これまで自分が実装してきたMVPは中途半端だった
MVPとは について知れるサイト
https://github.com/rockname/ArchitectureSampleWithFirebase/tree/mvp
https://github.com/gdate/MVPTest
MVPの設計パターンにそったサンプルコード