28
設計

Android Architecture

Embed Size (px)

Citation preview

Page 1: Android Architecture

設計

Page 2: Android Architecture

こんな感じで考えています

Page 3: Android Architecture

全体像

Page 4: Android Architecture

View

Activity FragmentView層

Application層

Domain層

Infra層

Presenter Service

UseCaseEntity

ValueObject

Repository

Memory Provider Prefs Api

SQLite

Presentation層

Page 5: Android Architecture

DDD + MVP

Page 6: Android Architecture

なぜDDDか?

Page 7: Android Architecture

ドメインロジックを 綺麗にプレゼンテーション層と分けることができそうだっ

たから

Page 8: Android Architecture

なぜMVPか?

Page 9: Android Architecture

ActivityとFragmentをViewとして扱えるから

Page 10: Android Architecture

ドメイン層

プレゼンテーション層

Controller

Model

View

タッチなどのイベント

Activityが この位置に居るので Model関連の処理を

Activityに書く事になる

Model View Controller

Activity

Page 11: Android Architecture

ドメイン層

プレゼンテーション層

Presenter

Model

View

タッチなどのイベント

Activityが この位置に居るので Modelと疎になり 書くべき事が減る

移譲

Model View Presenter

Activity

Page 12: Android Architecture

View、Activity、Fragment

Page 13: Android Architecture

View

Activity FragmentView層

Application層

Domain層

Infra層

Presenter Service

UseCaseEntity

ValueObject

Repository

Memory Provider Prefs Api

SQLite

Presentation層

Page 14: Android Architecture

役割

• Viewの描画

• (イベントをPresenterに譲渡)

Page 15: Android Architecture

Presenter

Page 16: Android Architecture

View

Activity FragmentView層

Application層

Domain層

Infra層

Presenter Service

UseCaseEntity

ValueObject

Repository

Memory Provider Prefs Api

SQLite

Presentation層

Page 17: Android Architecture

役割

• ドメイン層への伝達、Viewへの伝達

Page 18: Android Architecture

View

Activity FragmentView層

Application層

Domain層

Presenter Service

UseCaseEntity

ValueObject

Presentation層イベント

問い合わせ

Page 19: Android Architecture

View

Activity FragmentView層

Application層

Domain層

Presenter Service

UseCaseEntity

ValueObject

Presentation層

結果通知 (非同期の時はEventBus)

結果をもとに Viewへの反映依頼

Page 20: Android Architecture

UseCase

Page 21: Android Architecture

役割

• ドメインロジック

Page 22: Android Architecture

Repository

Page 23: Android Architecture

役割

• データの管理(CRUD)

Page 24: Android Architecture

ポイント

Page 25: Android Architecture

上の層のインスタンスは持てない

Domain層

Infra層

Presenter

UseCase

Repository

Presentation層

OK

OK

NG

NG

それをやると破綻する

Page 26: Android Architecture

実際には下の層のinterfaceを参照する

Domain層

Infra層

Presenter

UseCaseImpl

RepositoryImpl

Presentation層

<Repository>

<UseCase>

依存性をできる限りなくすため。あとテストしやすい。

Page 27: Android Architecture

参考になる

Page 28: Android Architecture

http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/

Android Clean Architecture

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

Androidの設計について

綺麗な設計について

GUI Architecturehttp://martinfowler.com/eaaDev/uiArchs.html

Martinさんのいろんな設計手法について。MVCとかMVPとか。

http://terasolunaorg.github.io/guideline/5.0.0.RELEASE/ja/ImplementationAtEachLayer/DomainLayer.html

ドメイン層の実装 あるFrameworkのどドメイン層の実装方法。

DDDちっくですごく勉強になる。