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
Navigationを見据えたリファクタリング -マルチモジュール化を添えて-
Search
Keisuke kiuchi
August 19, 2019
Programming
2.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Navigationを見据えたリファクタリング -マルチモジュール化を添えて-
Bonfire Android #5
2019/8/19
Keisuke kiuchi
August 19, 2019
More Decks by Keisuke kiuchi
See All by Keisuke kiuchi
巨大なプロダクトにおける技術負債と戦った成功と失敗の軌跡(途中経過)
kiuchikeisuke
0
1.8k
ぼくのかんがえた最強のUsecaseの作り方~あるいはビジネスロジックとはなにかという1つの回答~
kiuchikeisuke
13
7.5k
良いコードを書くためにやってみてること3つ.pdf
kiuchikeisuke
5
720
NavigationのNavOptions周りを覗いてみよう
kiuchikeisuke
0
810
AndroidStudioのテンプレートを覗いてみよう
kiuchikeisuke
2
960
Kotlin版CleanArchitectureのテンプレート作ったら爆速開発になった話+α
kiuchikeisuke
21
8.9k
Other Decks in Programming
See All in Programming
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
250
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
130
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
820
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
210
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1.1k
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
470
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
1
200
霧の中の代数的エフェクト
funnyycat
1
460
今さら聞けない .NET CLI
htkym
0
180
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
130
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
970
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
290
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Ruling the World: When Life Gets Gamed
codingconduct
0
290
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
So, you think you're a good person
axbom
PRO
2
2.1k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
It's Worth the Effort
3n
188
29k
Why Our Code Smells
bkeepers
PRO
340
58k
What's in a price? How to price your products and services
michaelherold
247
13k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
A better future with KSS
kneath
240
18k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
440
Transcript
OBWJHBUJPOΛݟਾ͑ͨϦϑΝΫλϦϯά dϚϧνϞδϡʔϧԽΛఴ͑ͯd #POpSF"OESPJE ɹܒี
ܒี w ৬ۀɿ:ͷ"OESPJEΤϯδχΞ݉ҭࣇύύ w झຯͰ࡞ͬͨϞϊɿʮΒ͘ͰΜ "QQ ʯɺ ʮ$MFBO"SDIJUFDUVSF5FNQMBUF'PS,PUMJO 044 ʯ
w ͖ͳΞʔΩςΫνϟɿ$MFBO"SDIJUFDVUF w 4/4 5XJUUFS!GFJ@LPNF (JUIVC!LJVDIJLFJTVLF 2JJUB!L@LFJTVLF
એͦͷ̍ w ٕज़ॻయ ʹͯαʔΫϧඈཾ͞Μ͔ͪΒ ʮϥϊϕ෩ʹ $MFBO"SDIJUFDUVSFΛֶͿຊʯ తͳಉਓࢽग़͠·ʔ͢
એͦͷ̎
ࠓճͷωλ ϑΝΠφϯεΞϓϦΛ͕ͬͭΓ ϦϑΝΫλϦϯά͠Α͏ͱͨ࣌͠ͷग़དྷࣄ ґଘؔ ༻ؔ
"QQ ͜Μͳײ͡ͳͭΛɾɾɾ 1SFTFOUFS %BUB
͜Μͳײ͡ʹ͍ͨ͠ "QQ 1SFTFOUFS %BUB %PNBJO 'SBHNFOU 'SBHNFOU 'SBHNFOU OBWJ HBUJPO
ɾ ɾ ɾ
1SFTFOUFS OBWJHBUJPOಋೖ͢Δ্Ͱݟ͖͑ͯͨ w BQQԼͷ'SBHNFOU͕OBWJHBUJPO͔Βݟ͑ͳ͍ w Ϋϥεؒͷ૬ޓґଘ͕ଟ͘શΫϥε͕͓Ҿӽ͢͠Δ͍ͩͬͨ w ը໘ભҠܥͷॲཧ͕৭ΜͳॴʹࢄΒ͍͙ͬͯͯ͢ʹಋೖͰ͖ͳ͔ͬͨ "QQ 'SBHNFOU
'SBHNFOU ɾ ɾ ɾ 'SBHNFOU OBWJ HBUJPO 'SBHNFOU 'SBHNFOU 'SBHNFOU 'SBHNFOU TPNF$MBTT TPNF$MBTT TPNF$MBTT TPNF$MBTT
ંҊʜ
কདྷOBWJHBUJPOΛಋೖ͍͢͠ Α͏ʹϦϑΝΫλϦϯά͠Α͏
ͬͨ͜ͱ ґଘͷ͖Λٯసͤͭͭ͞ OBWJHBUJPOʹؔ࿈͢ΔॲཧΛूͨ͠
͜ΕΛɾɾɾ w 3FGBDUPSFE'SBHNFOU͔Β'SBHNFOU ͕ݟ͑ͳ͍ 1SFTFOUFS "QQ 3FGBDUPSFE 'SBHNFOU 'SBHNFOU ɾ
ɾ ɾ 'SBHNFOU
͜͏ͨ͠ w /BWJ*OUFSGBDFΛ௨ͯؒ͠తʹ'SBHNFOU ΞΫηεͰ͖ΔΑ͏ʹͨ͠ 1SFTFOUFS "QQ 3FGBDUPSFE 'SBHNFOU 'SBHNFOU ɾ
ɾ ɾ 'SBHNFOU /BWJ *OUFSGBDF /BWJ *OUFSGBDF *NQM
1SFTFOUFS "QQ ࣮ interface NaviInterface { fun getFragment2(): Fragment fun
getFragment3(data: SomeData): Fragment } class RefactoredFragment { override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { android.R.id.home -> changeFragment(naviInterface.getFragment2()) R.id.action_sub -> changeFragment(naviInterface.getFragment3(data)) } return super.onOptionsItemSelected(item) } } class NaviInterfaceImpl : NaviInterface { override fun getFragment2(): Fragment = Fragment2.newInstance() override fun getFragment3(data: SomeData): Fragment = Fragment3.newInstance(data.code, data.name) } OBWJHBUJPOΛ͏ͱ͖͜ΕΒΛ ஔ͖͑Ε0, ͩͱࢥ͏ OBWJHBUJPOʹ͢Δ࣌ ͜ΕΒΛஔ͖͑Ε0,
OBWJHBUJPO༻ͷॲཧ͕ूग़དྷͯ 1SFTFOUFS͕BQQʹґଘ͠ͳ͘ͳͬͨ
ऄͦͷ̍ w ͜ͷख๏ͬͯଞͷϨΨγʔͳ"QJ6UJMݺͼग़͠ʹ͑ΔΜ͡Όʁ ˠ:&4 1SFTFOUFS "QQ 3FGBDUPSFE 'SBHNFOU -FHBDZ6UJM ɾ
ɾ ɾ -FHBDZ"QJ -FHBDZ *OUFSGBDF -FHBDZ *OUFSGBDF *NQM -FHBDZ *OUFSGBDF -FHBDZ *OUFSGBDF -FHBDZ *OUFSGBDF *NQM -FHBDZ *OUFSGBDF *NQM
ऄͦͷ w ͦͦOBWJHBUJPOΛBQQʹ࣮͢ΕΑ͔ͬͨͷͰʁ ˠ:&4 1SFTFOUFS "QQ 3FGBDUPSFE 'SBHNFOU 'SBHNFOU ɾ
ɾ ɾ 'SBHNFOU OBWJ HBUJPO
·ͱΊ w ґଘͷ͖Λٯసͤ͞Εɺ1SFTFOUFSϞδϡʔϧ͔ΒBQQϞδϡʔϧ ͷؒతͳࢀর͕Մೳ OBWJHBUJPOҎ֎ʹ৭ΜͳγʔϯͰར༻Մೳ w ͦͦOBWJHBUJPOͷ࣮ΛBQQϞδϡʔϧͰߦ͑ґଘੑΛ ؾʹ͠ͳͯ͘ྑ͍
͓ΘΓ