Suche senden
Hochladen
VIPER アーキテクチャによる iOS アプリの設計
•
20 gefällt mir
•
12,310 views
Yuichi Adachi
Folgen
第二回 北海道勉強会「スマホアプリ開発、あしたのための環境と設計のアプローチ」 資料
Weniger lesen
Mehr lesen
Ingenieurwesen
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 35
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Kotlinアンチパターン
Kotlinアンチパターン
Recruit Lifestyle Co., Ltd.
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
Empfohlen
Kotlinアンチパターン
Kotlinアンチパターン
Recruit Lifestyle Co., Ltd.
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
TDD のこころ
TDD のこころ
Takuto Wada
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
Koichiro Matsuoka
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
こわくない Git
こわくない Git
Kota Saito
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
増田 亨
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)
Scott Wlaschin
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
REST API のコツ
REST API のコツ
pospome
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
NISHIHARA Shota
たのしい高階関数
たのしい高階関数
Shinichi Kozake
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修
akkuma
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
ke-m kamekoopa
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
CData Software Japan
Weitere ähnliche Inhalte
Was ist angesagt?
TDD のこころ
TDD のこころ
Takuto Wada
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
Koichiro Matsuoka
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
こわくない Git
こわくない Git
Kota Saito
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
増田 亨
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)
Scott Wlaschin
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
REST API のコツ
REST API のコツ
pospome
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
NISHIHARA Shota
たのしい高階関数
たのしい高階関数
Shinichi Kozake
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修
akkuma
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
ke-m kamekoopa
Was ist angesagt?
(20)
TDD のこころ
TDD のこころ
Pythonによる黒魔術入門
Pythonによる黒魔術入門
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
こわくない Git
こわくない Git
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
REST API のコツ
REST API のコツ
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
たのしい高階関数
たのしい高階関数
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
Ähnlich wie 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
Ähnlich wie 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
Mehr von 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
Mehr von 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
Jetzt herunterladen