1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】ちょっとはMVPという設計パターンに触れてみる

Last updated at Posted at 2020-09-24

なぜ書いたか

これまでSwiftを使って色々アプリを作ってきましたが、
正直設計パターンというのをほとんど意識しませんした:joy:
基本的な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の設計パターンにそったサンプルコード

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?