android architecture

Post on 05-Aug-2015

392 Views

Category:

Engineering

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

設計

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

全体像

View

Activity FragmentView層

Application層

Domain層

Infra層

Presenter Service

UseCaseEntity

ValueObject

Repository

Memory Provider Prefs Api

SQLite

Presentation層

DDD + MVP

なぜDDDか?

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

たから

なぜMVPか?

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

ドメイン層

プレゼンテーション層

Controller

Model

View

タッチなどのイベント

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

Activityに書く事になる

Model View Controller

Activity

ドメイン層

プレゼンテーション層

Presenter

Model

View

タッチなどのイベント

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

移譲

Model View Presenter

Activity

View、Activity、Fragment

View

Activity FragmentView層

Application層

Domain層

Infra層

Presenter Service

UseCaseEntity

ValueObject

Repository

Memory Provider Prefs Api

SQLite

Presentation層

役割

• Viewの描画

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

Presenter

View

Activity FragmentView層

Application層

Domain層

Infra層

Presenter Service

UseCaseEntity

ValueObject

Repository

Memory Provider Prefs Api

SQLite

Presentation層

役割

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

View

Activity FragmentView層

Application層

Domain層

Presenter Service

UseCaseEntity

ValueObject

Presentation層イベント

問い合わせ

View

Activity FragmentView層

Application層

Domain層

Presenter Service

UseCaseEntity

ValueObject

Presentation層

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

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

UseCase

役割

• ドメインロジック

Repository

役割

• データの管理(CRUD)

ポイント

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

Domain層

Infra層

Presenter

UseCase

Repository

Presentation層

OK

OK

NG

NG

それをやると破綻する

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

Domain層

Infra層

Presenter

UseCaseImpl

RepositoryImpl

Presentation層

<Repository>

<UseCase>

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

参考になる

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ちっくですごく勉強になる。

top related