viper アーキテクチャによる ios アプリの設計

35
Copyright © Classmethod, Inc. VIPER アーキテクチャ による iOS アプリの設計 Classmethod Inc 安達勇一 1

Upload: yuichi-adachi

Post on 02-Jul-2015

1.220 views

Category:

Engineering


9 download

DESCRIPTION

第二回 北海道勉強会「スマホアプリ開発、あしたのための環境と設計のアプローチ」 資料

TRANSCRIPT

Page 1: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

VIPER アーキテクチャによる iOS アプリの設計

Classmethod Inc安達勇一

1

Page 2: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

自己紹介

• iPhone アプリ・サービス事業部• iOS 開発歴 2.5 年• 最近は Swift で開発をしています

2

Page 3: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

9月上旬…

3

F.T氏

北海道勉強会やるんだけど、なんか話さない?お題は未定ね

そうすね…Swift かなんかで話しましょうか…

F.T氏

Swift勉強会…いいよね…

Page 4: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 4

月日は流れ…

Page 5: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

9月下旬…

5

F.T氏

Swift勉強会改め、スマホアプリの設計的な話にしようかと思うんだけど、どう?

設計の話すかwwwwwwwwww

_人人人人人人人人人_> 突然の仕様変更 <‾Y^Y^Y^Y^Y^Y^Y^Y‾

Page 6: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

🔍

6

 ios mobile archtecture

Page 7: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

🔍

7

 ios mobile archtecture

Page 8: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 8

💡

Page 9: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

VIPERアーキテクチャ

• View Interactor Presenter Entity Routing

9

Page 10: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 10

Page 11: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 11

その前に…

Page 12: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

MVCアーキテクチャ• ModelとViewとControllerにコードを分割• Model: ロジック• View: 表示• Controller: Modelを制御

12

View

Controller

Model

Event

Page 13: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

MVP on iOS Application• Model View Presenter• ViewはModelを直接操作しない• Model : ロジック• Presenter : UIViewController• View : UIView

13

View

Presenter

Model

Page 14: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

Massive ViewController• ModelとViewに置けなかったロジックは

ViewController(Presenter)へ• 扱うViewの量に合わせて        コード量が増える

• Mediatorとしては正解だが…

14

Page 15: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

Massive ViewController

15

• ModelとViewに置けなかったロジックはViewController(Presenter)へ

• 扱うViewの量に合わせて        コード量が増える

• Mediatorとしては正解だが…

Page 16: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

MVCで考えることの不満点

• Modelに様々な役割があるのにひとまとめにしてしまう

• Massive ViewControllerになりやすい• テスト可能なModelへの移行に役割を与えたい

16

Page 17: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

Before VIPER

17

View

ModelController

Page 18: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

Before VIPER

18

View

Model

Controller(Over 1000lines!!)

Page 19: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 19

VIPER 再び

Page 20: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

VIPERアーキテクチャ

• フレームワークに依存しない• DB, APIに依存しない• UIに依存しない• テストしやすい

20

View Interactor Presenter Entity Routing

Page 21: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

VIPERアーキテクチャ

• コアの静的モデル• 内部ビジネスロジック• 外界とビジネスロジックの仲介

• 外界

21

DB

API

View

OSS

Presenter

Interactor

Entity

DataStore

Routing

Page 22: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 22

View

PresenterRouting

Interactor

EntityDataStore

Page 23: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 23

View

PresenterRouting

Interactor

EntityDataStore

Protocolによって疎結合に、互いに知らない状態にする

Page 24: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 24

依存性を注入

DB,WebAPIを仲介

Businessロジック

UIロジック

UIView, UIViewController

静的データ

Page 25: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

Interactor

• 単一のユースケースを動的なモデルで表現• ビジネスロジック部• UIに全く依存しない• テストしやすい

25

Page 26: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

Entity

• Presenter以降のレイヤに直接渡されない• 静的なモデル• VIPERでは動的でない

26

Page 27: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

Presenter• InteractorからのデータをView向けに送る• Viewからのインプットを受ける• Viewを直接知らない• Viewロジックに対する         テストを書ける

27

Page 28: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

View• View, ViewController等• 主体的にPresenterにデータを要求しない• Presenterからの指示         待ち

28

Page 29: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

Routing• UIWindowのインスタンスを保有• WindowにViewController(VC)を注入• VCにPresenterを注入• VCの遷移表示も管理

29

Page 30: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc.

Before VIPER

30

View

Model

Controller

Page 31: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 31

After VIPERView

PresenterRouting

Interactor

EntityDataStore

Page 32: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 32

View

PresenterRouting

Interactor

EntityDataStore

After VIPER

Page 33: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 33

Page 34: VIPER アーキテクチャによる iOS アプリの設計

Copyright © Classmethod, Inc. 34

https://github.com/UsrNameu1/VIPER-SWIFT

http://www.objc.io/issue-13/viper.html

http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html

参考資料objc-io 13

Clean Architecture

Forked Sample Code

Page 35: VIPER アーキテクチャによる iOS アプリの設計