Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CleanArchitecture For Android
Search
MinoHiroki
January 14, 2017
Technology
3
2k
CleanArchitecture For Android
CleanArchitectureを参考に、Androidアプリをつくってみたことの紹介
MinoHiroki
January 14, 2017
Tweet
Share
Other Decks in Technology
See All in Technology
AI ReadyなData PlatformとしてのAutonomous Databaseアップデート
oracle4engineer
PRO
0
110
動画データのポテンシャルを引き出す! Databricks と AI活用への奮闘記(現在進行形)
databricksjapan
0
130
GC25 Recap+: Advancing Go Garbage Collection with Green Tea
logica0419
1
320
「AI駆動PO」を考えてみる - 作る速さから価値のスループットへ:検査・適応で未来を開発 / AI-driven product owner. scrummat2025
yosuke_nagai
0
360
Tomorrow graphlib, Let us use everybody
hayaosuzuki
0
160
KMP の Swift export
kokihirokawa
0
280
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
20k
ユニットテストに対する考え方の変遷 / Everyone should watch his live coding
mdstoy
0
110
それでも私はContextに値を詰めたい | Go Conference 2025 / go conference 2025 fill context
budougumi0617
4
1.1k
“2件同時配達”の開発舞台裏 〜出前館PMが挑んだダブルピック実現に向けた体験設計〜
demaecan
0
170
ZOZOのAI活用実践〜社内基盤からサービス応用まで〜
zozotech
PRO
0
130
PythonとLLMで挑む、 4コマ漫画の構造化データ化
esuji5
1
120
Featured
See All Featured
Designing for humans not robots
tammielis
254
25k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
950
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
4 Signs Your Business is Dying
shpigford
185
22k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Making Projects Easy
brettharned
118
6.4k
The Invisible Side of Design
smashingmag
301
51k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Done Done
chrislema
185
16k
Practical Orchestrator
shlominoach
190
11k
Building an army of robots
kneath
306
46k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Transcript
CleanArchitectureϕʔεͰ AndroidΞϓϦͭͬͯ͘Έͨ
ࣗݾհ ❖ 2014CyberAgent৽ଔೖࣾ ❖ androidྺ2 ❖ AMESTAGEͷandroid։ൃΛ୲ ❖ झຯɿήʔϜɾΞχϝɾΞΠυϧ ࡾ
߂وʢMino Hirokiʣ
AMESTAGEհ
None
࣍ ❖ CleanArchitectureͱʁ ❖ CleanArchitectureʹج͍ͮͨAndroid։ൃ ❖ ;Γ͔͑Γ
࣍ ❖ CleanArchitectureͱʁ ❖ CleanArchitectureʹج͍ͮͨAndroid։ൃ ❖ ;Γ͔͑Γ
CleanArchitectureͱʁ υϝΠϯۦಈ։ൃʢDDDʣɺϢʔεέʔεۦಈ։ൃʢUCDDʣͳͲΛϕʔεʹఏҊ͞Εͨɺ ֤ػೳΛͭͷΛͬͨԁܗͷϨΠϠʔʹ͚ɺ֤ϨΠϠʔؒʹґଘؔͷϧʔϧΛ࣋ͨͤͨઃܭࢥɻ UIͱϏδωεϩδοΫΛΩϨΠʹ͚Δ͜ͱ͕Ͱ͖ɺݻ༗ͷϑϨʔϜϫʔΫσʔλετΞʹґଘ͠ͳ͍ͱ͍͏ ͷ͕࠷େͷϝϦοτɻ
CleanArchitectureͱʁ 4ͭͷϨΠϠʔ ଆͷԁ΄ͲαʔϏεͷࠜװͱͳΔߴ࣍ͷ֓೦ɻ ֎ଆ۩ମతͳ%#6*ͳͲɺৄࡉͳ֓೦ɻ
CleanArchitectureͱʁ Enterprise Business RulesʢEntitiesʣ αʔϏεશମʹڞ௨͢ΔϏδωεϧʔϧɻ͜ͷઃܭʹ͓͚Δ࠷ߴϨϕϧͷϧʔϧɻ ྫʣAMESTAGEͷ߹ɺνϟϯωϧใ์ૹใɺϢʔβʔใͳͲͷఆٛɻ
CleanArchitectureͱʁ Application Business RulesʢUseCasesʣ ΞϓϦέʔγϣϯݻ༗ͷϏδωεϧʔϧɻʢࠓճͷ߹ʣAndroidΞϓϦ͕ඞཁͱ͢ΔϏδωεϩδοΫ͕͜͜ʹೖΔɻ ྫʣ์ૹIDΛݩʹ์ૹใΛऔಘ͢ΔɺTwitter࿈ܞใΛݩʹαʔϏεͷೝূΛߦ͏ͳͲɻ
CleanArchitectureͱʁ Interface AdaptersʢControllers/Presenters/Gatewaysʣ UIDBͳͲͷ֎෦ػؔͱɺϢʔεέʔεΤϯςΟςΟͳͲͷυϝΠϯʢαʔϏεͷࠜװʣͱͷؒͷڮ͠ͷͨΊͷɺ σʔλมΛߦ͏Adapter܈ɻ͜ͷUIDBʹؔ͢ΔใΛ͍ͬͯΔ͕ɺEntity UseCaseΒͳ͍ɻ
CleanArchitectureͱʁ Frameworks & DriversʢWeb / UI / DB …ʣ ͜ͷઃܭʹ͓͚Δ࠷֎ɻDBUIϑϨʔϜϫʔΫͳͲ͕͜͜ʹଐ͢Δɻ
FY 42-ωοτϫʔΫͷίʔυɺ6*ͷඳըͳͲ
CleanArchitectureͱʁ ґଘؔͷϧʔϧ ԁͷ֎ଆͷ͕ଆͷʹґଘ͢Δɻʢଆͷ֎ଆͷͷ͜ͱΛΒͳ͍ʣ ଆͷͷ͕֎ଆͷͷΛར༻͢Δͱ͖ɺΠϯλʔϑΣʔεΛఆٛͯ͠ʢ͞ΒʹDIͱΈ߹ΘͤΔ͜ͱʹΑΓʣɺૄͳؔ Λ่͞ͳ͍ɻʢϢʔεέʔε͕DBΛѻ͏߹RepositoryΠϯλʔϑΣʔεΛఆٛ͢Δʣ
࣍ ❖ CleanArchitectureͱʁ ❖ CleanArchitectureʹج͍ͮͨAndroid։ൃ ❖ ;Γ͔͑Γ
CleanArchitectureʹج͍ͮͨAndroid։ൃ
Activity/Fragment Viewͱͯ͠ͷׂ→ViewModelͷใΛը໘ʹදࣔ ίϯτϩʔϥͱͯ͠ͷׂ→PresenterͷϦΫΤετ ViewModel ֤ը໘ͷঢ়ଶɻ Presenter ֤ը໘ݻ༗ͷϩδοΫɻ UseCase σʔλͷऔಘߋ৽ͳͲͷϏδωεϩδοΫ Entity
αʔϏε্ͷ֓೦Λͦͷ··දݱͨ͠Ϋϥε܈ɻ ϢʔβʔใɺνϟϯωϧใͳͲɻ Repository ӬଓԽσʔλͷग़͠ೖΕɻ "1*%#ͷΞΫηεΛϥοϓ͢Δɻ API DB APIϩʔΧϧDB͔Βͷσʔλͷऔಘɻ CleanArchitectureʹج͍ͮͨAndroid։ൃ
CleanArchitectureʹج͍ͮͨAndroid։ൃ Activity/Fragment Viewͱͯ͠ͷׂ→ViewModelͷใΛը໘ʹදࣔ ίϯτϩʔϥͱͯ͠ͷׂ→PresenterͷϦΫΤετ ViewModel ֤ը໘ͷঢ়ଶɻ Presenter ֤ը໘ݻ༗ͷϩδοΫɻ UseCase σʔλͷऔಘߋ৽ͳͲͷϏδωεϩδοΫ
Entity αʔϏε্ͷ֓೦Λͦͷ··දݱͨ͠Ϋϥε܈ɻ ϢʔβʔใɺνϟϯωϧใͳͲɻ Repository ӬଓԽσʔλͷग़͠ೖΕɻ "1*%#ͷΞΫηεΛϥοϓ͢Δɻ API DB APIϩʔΧϧDB͔Βͷσʔλͷऔಘɻ
֎෦ͷӬଓԽػߏ͔Βσʔλ͕ฦ͍ͬͯ͘ྲྀΕɺ RxJavaΛར༻ͯ͠ObservableͷܗͰฦ͢ɻʢίʔυ ͕γϯϓϧʹͳΔͷͰʣ CleanArchitectureʹج͍ͮͨAndroid։ൃ
ԁͷଆ͔Β֎ଆʹ͔͏ՕॴInterfaceΛఆٛ͠ ͯɺ֎ଆͷΫϥε͜ΕΛimplements͢Δɻ ͜ΕʹΑΓɺଆͷΫϥε͕֎ଆͷΫϥεʹґଘ͠ͳ ͍Α͏ʹ͢ΔɻʢDIʹDagger2Λར༻ʣ CleanArchitectureʹج͍ͮͨAndroid։ൃ
| |- mobile | | | |- ui | |-
user // Activity/Fragment&Presenter&ViewModel | |- UserActivity | |- UserComponent | |- UserPresenter | |- UserView | |- UserViewModel | |- core | |- user | |- repository // Repository & Dao /Api | | |- UserRepositoryImpl | | |- UserApi | | |- UserDao | | | |- usecase // UseCase | | |- GetLoginUser | | | |- User // Entity | ύοέʔδߏ CleanArchitectureʹج͍ͮͨAndroid։ൃ
CleanArchitectureʹج͍ͮͨAndroid։ൃ ۩ମతͳίʔυͷհ αϯϓϧɿϩάΠϯϢʔβʔใΛදࣔ͢Δը໘
| |- core | |- user | |- repository //
Repository & Dao /Api | | |- UserRepositoryImpl | | |- UserApi | | |- UserDao | | | |- usecase // UseCase | | |- GetLoginUser | | | |- User // Entity | CleanArchitectureʹج͍ͮͨAndroid։ൃ
Entity CleanArchitectureʹج͍ͮͨAndroid։ൃ Entityͷׂ ɾαʔϏεͷࠜװͱͳΔ֓೦ͷఆٛΛߦ͏
UseCase CleanArchitectureʹج͍ͮͨAndroid։ൃ UseCaseͷׂ ɾΞϓϦέʔγϣϯͷϏδωεϩδοΫ ɾThreadͷઃఆɻ࣮ߦผεϨουɺ݁ՌΛฦ͢ͷϝΠϯεϨουɻʢ࣮ࡍͷ։ൃͰجఈΫϥεͰߦ͍ͬͯΔʣ ɾϦϙδτϦΛར༻ͨ͠ॲཧɻෳϦϙδτϦΛར༻͢Δ͜ͱ͋Δɻ ɹʮϩάΠϯϢʔβʔΛऔಘ͔ͯ͠ΒϢʔβʔͷνϟϯωϧใΛऔಘ͢ΔʯͳͲ
UseCase CleanArchitectureʹج͍ͮͨAndroid։ൃ UseCaseͷׂ ɾΞϓϦέʔγϣϯͷϏδωεϩδοΫ ɾThreadͷઃఆɻ࣮ߦผεϨουɺ݁ՌΛฦ͢ͷϝΠϯεϨουɻʢجఈΫϥεͰߦ͍ͬͯΔɻίʔυׂѪʣ ɾϦϙδτϦΛར༻ͨ͠ॲཧɻෳϦϙδτϦΛར༻͢Δ͜ͱ͋Δɻ ɹʮϩάΠϯϢʔβʔΛऔಘ͔ͯ͠ΒϢʔβʔͷνϟϯωϧใΛऔಘ͢ΔʯͳͲ
Repository CleanArchitectureʹج͍ͮͨAndroid։ൃ Repositoryͷׂ ɾӬଓԽػߏʹର͢ΔγϯϓϧͳΠϯλʔϑΣʔεΛఏڙ ɾ۩ମతͳDBAPIͷ࣮ผΫϥεʹఆٛ͠ɺͦΕΛར༻͢Δ͚ͩɻʢDao/ApiͷίʔυׂѪʣ
| |- mobile | | | |- ui | |-
user // Activity/Fragment&Presenter&ViewModel | |- UserActivity | |- UserComponent | |- UserPresenter | |- UserView | |- UserViewModel CleanArchitectureʹج͍ͮͨAndroid։ൃ
Presenter CleanArchitectureʹج͍ͮͨAndroid։ൃ Presenterͷׂ ɾUIϩδοΫͷ୲͍खɻUseCaseΛ༻͍ͯɺը໘ͷඳըʹඞཁͳॲཧΛߦ͏ɻ ɾUseCaseͷ݁ՌΛViewʹ͑Δͱ͖ɺViewΠϯλʔϑΣʔεΛఆٛͯ͜͠ΕΛܦ༝͢Δ PresenterͷجఈΫϥεͰߦ͏ॲཧʢίʔυׂѪʣ ɾڞ௨ͷΤϥʔϋϯυϦϯάʢex. ڧ੍ΞοϓσʔτͷΤϥʔίʔυ͕͖ͨΒμΠΞϩάදࣔʣ ɾSubscriptionͷཧʢActivity.onDestroyͰ࣮ߦதͷॲཧΛഁغ͢Δʣ
ViewModel CleanArchitectureʹج͍ͮͨAndroid։ൃ ViewModelͷׂ ɾը໘ʹؔ͢Δঢ়ଶΛ͜͜ʹఆٛ͠ɺมߋΛActivity/Fragmentʹ௨͢Δ ɾandroid.databinding.Observableʓʓ ͕ศར
Activity/Fragment CleanArchitectureʹج͍ͮͨAndroid։ൃ Activity/Fragmentͷׂ ɾViewModelͷใΛViewʹඳը͢Δ ɾPresenterʹॲཧΛϦΫΤετ͢Δ ʢϥΠϑαΠΫϧɺΫϦοΫΠϕϯτɺetc..ʣ
| |- mobile | | | |- ui | |-
user // Activity/Fragment, Presenter, ViewModel | |- UserActivity | |- UserComponent | |- UserPresenter | |- UserView | |- UserViewModel | |- core | |- user | |- repository // Repository, Dao/Api | | |- UserRepositoryImpl | | |- UserApi | | |- UserDao | | |- UserRepositoryModule | | | |- usecase // Usecase | | |- GetLoginUser | | |- UserRepository | | | |- User // Entity | CleanArchitectureʹج͍ͮͨAndroid։ൃ ҎԼͷจࣈͷΫϥεpackageείʔϓͰఆٛͰ͖Δ
࣍ ❖ CleanArchitectureͱʁ ❖ CleanArchitectureʹج͍ͮͨAndroid։ൃ ❖ ;Γ͔͑Γ
;Γ͔͑Γ Α͔ͬͨ͜ͱ ɾ͖Ε͍ʹ͔͚Δ&͋Δఔ͓ܾ·Γͷίʔυʹͳͬͯ͘ΔͷͰɺ ɹਂ͘ߟ͑ͣʹॻ͚Δ͠ϨϏϡʔ͍͢͠ɻ ɾςετॻ͖͍͢ʢҰ൪֎ଆҎ֎୯७ͳjavaͷςετίʔυ͕ॻ͚Δʣ ɾείʔϓΛݶఆͯ͠ίʔυΛΊΔͷ͕خ͍͠ ΘΔ͔ͬͨ͜ͱɺେมͩͬͨ͜ͱ ɾ؆୯ͳػೳՃͰίʔυྔଟ͘ͳΔ ɾνʔϜͰͷڞ༗ʢGithubͷwikiΛར༻ɻ͋ͱϨϏϡʔ͠ͳ͕Βʣ
CleanArchitectureϕʔεͰAndroidΞϓϦͭͬͨ͘ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ