Submit Search
Upload
VIPER アーキテクチャによる iOS アプリの設計
•
20 likes
•
12,310 views
Yuichi Adachi
Follow
第二回 北海道勉強会「スマホアプリ開発、あしたのための環境と設計のアプローチ」 資料
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 35
Download now
Download to read offline
Recommended
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
都元ダイスケ Miyamoto
Iocコンテナについて
Iocコンテナについて
Akio Terayama
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Takeru Maehara
Recommended
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
都元ダイスケ Miyamoto
Iocコンテナについて
Iocコンテナについて
Akio Terayama
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Takeru Maehara
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
Takayuki Shimizukawa
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
HTTP/2 入門
HTTP/2 入門
Yahoo!デベロッパーネットワーク
REST API のコツ
REST API のコツ
pospome
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
Ken Morishita
こわくない Git
こわくない Git
Kota Saito
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
Naohiro Fujie
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
Shuji Kikuchi
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
Recruit Lifestyle Co., Ltd.
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
Masatoshi Tada
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Amazon Web Services Japan
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
CData Software Japan
More Related Content
What's hot
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
Takayuki Shimizukawa
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
HTTP/2 入門
HTTP/2 入門
Yahoo!デベロッパーネットワーク
REST API のコツ
REST API のコツ
pospome
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
Ken Morishita
こわくない Git
こわくない Git
Kota Saito
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
Naohiro Fujie
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
Shuji Kikuchi
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
Recruit Lifestyle Co., Ltd.
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
Masatoshi Tada
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Amazon Web Services Japan
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
What's hot
(20)
イベント・ソーシングを知る
イベント・ソーシングを知る
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
HTTP/2 入門
HTTP/2 入門
REST API のコツ
REST API のコツ
オブジェクト指向できていますか?
オブジェクト指向できていますか?
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
こわくない Git
こわくない Git
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Similar to VIPER アーキテクチャによる iOS アプリの設計
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
CData Software Japan
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
Yoshiki Takeoka
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Atsushi Nakamura
最近のiOS開発の現状と実状
最近のiOS開発の現状と実状
クラスメソッド株式会社
20110824 android apps_endo
20110824 android apps_endo
一般社団法人メディア事業開発会議
ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurb
Koichiro Sumi
20110824 android apps_endo
20110824 android apps_endo
一般社団法人メディア事業開発会議
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げる
Michitaka Terada
20180130 設計イベント
20180130 設計イベント
Atsushi Takayasu
Spring I/O 2015 報告
Spring I/O 2015 報告
Takuya Iwatsuka
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
Yahoo!デベロッパーネットワーク
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
Tsutomu Ogasawara
Angularreflex20141210
Angularreflex20141210
Shinichiro Takezaki
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
Atsushi Nakamura
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
Tokuhiro Eto
Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~
Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Tomoki Hasegawa
Jazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & Robot
Nobuyuki Matsui
Similar to VIPER アーキテクチャによる iOS アプリの設計
(20)
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
最近のiOS開発の現状と実状
最近のiOS開発の現状と実状
20110824 android apps_endo
20110824 android apps_endo
ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurb
20110824 android apps_endo
20110824 android apps_endo
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げる
20180130 設計イベント
20180130 設計イベント
Spring I/O 2015 報告
Spring I/O 2015 報告
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
Angularreflex20141210
Angularreflex20141210
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~
Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Jazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & Robot
More from Yuichi Adachi
Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28
Yuichi Adachi
Swift2.x を Scala からみる
Swift2.x を Scala からみる
Yuichi Adachi
Swift2 の新機能 Protocol Extension
Swift2 の新機能 Protocol Extension
Yuichi Adachi
Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19
Yuichi Adachi
続・ゲンバのSwift
続・ゲンバのSwift
Yuichi Adachi
Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15
Yuichi Adachi
ゲンバのSwift
ゲンバのSwift
Yuichi Adachi
Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14
Yuichi Adachi
[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra
Yuichi Adachi
Swiftの新機能 Optional
Swiftの新機能 Optional
Yuichi Adachi
ユニットテスト初学者がKiwiFramework非同期テストで失敗した
ユニットテスト初学者がKiwiFramework非同期テストで失敗した
Yuichi Adachi
Applicative functor
Applicative functor
Yuichi Adachi
More from Yuichi Adachi
(12)
Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28
Swift2.x を Scala からみる
Swift2.x を Scala からみる
Swift2 の新機能 Protocol Extension
Swift2 の新機能 Protocol Extension
Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19
続・ゲンバのSwift
続・ゲンバのSwift
Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15
ゲンバのSwift
ゲンバのSwift
Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14
[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra
Swiftの新機能 Optional
Swiftの新機能 Optional
ユニットテスト初学者がKiwiFramework非同期テストで失敗した
ユニットテスト初学者がKiwiFramework非同期テストで失敗した
Applicative functor
Applicative functor
VIPER アーキテクチャによる iOS アプリの設計
1.
VIPER アーキテクチャ による
iOS アプリの設計 Copyright © Classmethod, Inc. Classmethod Inc 安達勇一 1
2.
Copyright © Classmethod,
Inc. 自己紹介 • iPhone アプリ・サービス事業部 • iOS 開発歴 2.5 年 • 最近は Swift で開発をしています 2
3.
Copyright © Classmethod,
Inc. 9月上旬… 3 F.T氏 私 北海道勉強会やるんだけど、なんか話さない? お題は未定ね そうすね…Swift かなんかで話しましょうか… F.T氏 Swift勉強会…いいよね…
4.
月日は流れ… Copyright ©
Classmethod, Inc. 4
5.
Swift勉強会改め、スマホアプリの設計的な話にしようかと思う んだけど、どう? Copyright
© Classmethod, Inc. 9月下旬… 5 F.T氏 私 設計の話すかwwwwwwwwww _人人人人人人人人人_ > 突然の仕様変更 < ‾Y^Y^Y^Y^Y^Y^Y^Y‾
6.
Copyright © Classmethod,
Inc. 6 ios mobile archtecture
7.
Copyright © Classmethod,
Inc. 7 ios mobile archtecture
8.
Copyright ©
Classmethod, Inc. 8
9.
VIPERアーキテクチャ • View
Interactor Presenter Entity Routing Copyright © Classmethod, Inc. 9
10.
Copyright © Classmethod,
Inc. 10
11.
その前に… Copyright ©
Classmethod, Inc. 11
12.
MVCアーキテクチャ • ModelとViewとControllerにコードを分割
• Model: ロジック • View: 表示 • Controller: Modelを制御 Copyright © Classmethod, Inc. 12 Controller View Model Event
13.
MVP on iOS
Application • Model View Presenter • ViewはModelを直接操作しない • Model : ロジック • Presenter : UIViewController • View : UIView Copyright © Classmethod, Inc. 13 View Presenter Model
14.
Massive ViewController •
ModelとViewに置けなかったロジックは ViewController(Presenter)へ • 扱うViewの量に合わせて コード量が増える • Mediatorとしては正解だが… Copyright © Classmethod, Inc. 14
15.
Massive ViewController •
ModelとViewに置けなかったロジックは ViewController(Presenter)へ • 扱うViewの量に合わせて コード量が増える • Mediatorとしては正解だが… Copyright © Classmethod, Inc. 15
16.
MVCで考えることの不満点 • Modelに様々な役割があるのにひとまとめ
にしてしまう • Massive ViewControllerになりやすい • テスト可能なModelへの移行に役割を与え たい Copyright © Classmethod, Inc. 16
17.
Copyright © Classmethod,
Inc. Before VIPER View Controller Model 17
18.
Controller(Over 1000lines!!) Copyright
© Classmethod, Inc. Before VIPER View Model 18
19.
VIPER 再び Copyright
© Classmethod, Inc. 19
20.
VIPERアーキテクチャ View Interactor
Presenter Entity Routing • フレームワークに依存しない • DB, APIに依存しない • UIに依存しない • テストしやすい Copyright © Classmethod, Inc. 20
21.
VIPERアーキテクチャ DataStore Interactor
Entity Copyright © Classmethod, Inc. • コアの静的モデル • 内部ビジネスロジック • 外界とビジネスロジッ クの仲介 • 外界 21 DB API View OSS Presenter Routing
22.
Copyright © Classmethod,
Inc. 22 View Presenter Routing Interactor Entity DataStore
23.
Copyright © Classmethod,
Inc. 23 View Presenter Routing Interactor Entity DataStore Protocolによって疎結合に、互いに知らない状態にする
24.
依存性を注入 DB,WebAPIを 仲介
UIView, UIViewController Copyright © Classmethod, Inc. 24 UIロジック Businessロジック 静的データ
25.
Copyright © Classmethod,
Inc. Interactor • 単一のユースケースを動的なモデルで表現 • ビジネスロジック部 • UIに全く依存しない • テストしやすい 25
26.
Copyright © Classmethod,
Inc. Entity • Presenter以降のレイヤに直接渡されない • 静的なモデル • VIPERでは動的でない 26
27.
Copyright © Classmethod,
Inc. Presenter • InteractorからのデータをView向けに送る • Viewからのインプットを受ける • Viewを直接知らない • Viewロジックに対する テストを書ける 27
28.
Copyright © Classmethod,
Inc. View • View, ViewController等 • 主体的にPresenterにデータを要求しない • Presenterからの指示 待ち 28
29.
Copyright © Classmethod,
Inc. Routing • UIWindowのインスタンスを保有 • WindowにViewController(VC)を注入 • VCにPresenterを注入 • VCの遷移表示も管理 29
30.
Copyright © Classmethod,
Inc. Before VIPER View Controller Model 30
31.
After VIPER Copyright
© Classmethod, Inc. 31 View Presenter Routing Interactor Entity DataStore
32.
After VIPER Copyright
© Classmethod, Inc. 32 View Presenter Routing Interactor Entity DataStore
33.
Copyright © Classmethod,
Inc. 33
34.
参考資料 objc-io 13
http://www.objc.io/issue-13/viper.html Clean Architecture http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean- architecture.html Forked Sample Code https://github.com/UsrNameu1/VIPER-SWIFT Copyright © Classmethod, Inc. 34
Download now