Brief tutorial of implementing very primitive app(single list view) using Android Clean Architecture. It won't describe what and why, but rather, how to use it.
8. Plenty of Good Entries(with source codes)
8
• English
• Architecting Android…The Clean Way?
• Clean Android Architecture
• MVP for Android: how to organize presentation
layer
• Japanese
• AndroidオールスターズでClean Architectureについて発
表してきた
• これからの設計の話をしよう
• AndroidではMVCよりMVPの方がいいかもしれない
9. Plenty of Good Entries(with source codes)
9
• English
• Architecting Android…The Clean Way?
• Clean Android Architecture
• MVP for Android: how to organize presentation
layer
• Japanese
• AndroidオールスターズでClean Architectureについ
て発表してきた
• これからの設計の話をしよう
• AndroidではMVCよりMVPの方がいいかもしれない
Big Picture
Source Code
Roles
Big Picture
Roles
Presenter
16. Primitive App
16
• Single Activity
• Single List View
• Horizontally aligned texts
• Fab
• click and fetch data
• Fetch MusicList(data)
• by Retrofit
• freemusicarchive.org
• DI and EventHub
• Under Construction
18. The Goal
18
• Click Fab
• Run Retrofit to fetch data
• Not considering data response
19. 19
What We Will Implement
• reference
• Architecting Android…The Clean Way?:
• これからの設計の話をしよう
20. Thing You Need To Implement
20
• MainActivity
• MusicListPresenter
• MusicListUseCase
• MusicListUseCaseImpl
• MusicListRepository
• MusicListRepositoryImpl
• MusicListEntity
21. Data
Domain
Presentation
Thing You Need To Implement
21
• MainActivity
• MusicListAdapter
• MusicListPresenter
• MusicListUseCase
• MusicListUseCaseImpl
• MusicListRepository
• MusicListRepositoryImpl
• MusicListEntity
22. Presentation - UserAction
22
• Main Activity & MusicListAdapter
• Render List View attaching adapter
• Initialize followings
• repository, usecase, presenter
• Pass FAB clicked event along with Main Thread Info
to Presenter
• MusicListPresenter
• Receive FAB clicked event from View
• Execute MusicListUseCase(Imp) Job
• Pass thread info to MusicListUseCas(Imp)
23. 23
What We Just Implemented
• reference
• Architecting Android…The Clean Way?:
• これからの設計の話をしよう
24. Domain - User Action to Data Interface
24
• MusicUseCase
• Provide interface between Domain Layer &
Presentation Layer
• MusicUseCaseImp
• Ask MusicListRepository(Imp) for API(External
Resource)
• MusicListRepository
• Provide interface between Domain Layer &
Data Layer
25. 25
What We Just Implemented
• reference
• Architecting Android…The Clean Way?:
• これからの設計の話をしよう
26. Data - Data Interface to DataSource
26
• MusicListRepositoryImp
• To Fetch external Data
• Declare and Execute Retrofit Http Client
• GET http://freemusicarchive.org/api?
key={key}
• MusicListEntity
• Parse Response and map to domain/model
• gson will handle it.
27. 27
What We Just Implemented
• reference
• Architecting Android…The Clean Way?:
• これからの設計の話をしよう
28. That s it for Fetching Data
28
Now we want to Reflect Data
31. 31
What We Will Implement
• reference
• Architecting Android…The Clean Way?:
• これからの設計の話をしよう
32. Thing You Need To Implement
32
• MusicListRepository#MusicListFetchCallback
• MusicListUseCaseImpl
• MusicListUseCase#MusicListUseCaseCallback
• MusicListPresenter
• MusicListPresenter#MusicListViewCallback
• MainActivity
33. Presentation
Domain
Data
Thing You Need To Implement
33
• MusicListRepository#MusicListFetchCallback
• MusicListUseCaseImpl
• MusicListUseCase#MusicListUseCaseCallback
• MusicListPresenter
• MusicListPresenter#MusicListViewCallback
• MainActivity
34. Domain - Passing Data to User Interface
34
• MusicListRepository#MusicListFetchCallback
• MusicListUseCaseImpl
• Implement MusicListFetchCallback
• So that Main Threat can receive runnable
with command with fetched data
• MusicListUseCase#MusicListUseCaseCallback
• MusicListPresenter
• MusicListPresenter#MusicListViewCallback
• MainActivity
35. 35
What We Just Implemented
• reference
• Architecting Android…The Clean Way?:
• これからの設計の話をしよう
36. Presentation - Updating View
36
• MusicListUseCase#MusicListUseCaseCallback
• MusicListPresenter#MusicListViewCallback
• MusicListPresenter
• Implement MusicListUseCaseCallback
• Execute methods in MusicListViewCallback
• MainActivity
• Implement MusicListViewCallback
• So that User Case can pass fetched data
• So that Activity can update adapter data
37. 37
What We Just Implemented
• reference
• Architecting Android…The Clean Way?:
• これからの設計の話をしよう
39. Lots of Room for Improvement
39
• Callback Repetition is quite Ugly
• Many Reinvent Wheel
• Not using Dagger, RxJava
• Not a big fun of passing thread around
• Tutorial itself wasn t thoroughly covered