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
2.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CleanArchitecture For Android
CleanArchitectureを参考に、Androidアプリをつくってみたことの紹介
MinoHiroki
January 14, 2017
Other Decks in Technology
See All in Technology
20260804_Q4AzureUpdateBite_FabricDataAgentの精度を高める設計.pdf
matayuuu
1
140
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
130
関東Kaggler会発表資料
takoi
1
240
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
9k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
810
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
620
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
260
Agent 時代の Kaggle 展望 / kaggle-in-the-agentic-era
upura
1
770
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
210
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
Reference-Free Image Quality Assessment for Virtual Try-On via Human Feedback
zozotech
PRO
0
160
Featured
See All Featured
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
280
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Music & Morning Musume
bryan
47
7.3k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
RailsConf 2023
tenderlove
30
1.5k
Making Projects Easy
brettharned
120
6.7k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
210
Designing for humans not robots
tammielis
254
26k
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ΞϓϦͭͬͨ͘ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ