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
KotlinにおけるFactoryメソッド実装パターン
Search
doyaaaaaken
September 22, 2021
Programming
0
400
KotlinにおけるFactoryメソッド実装パターン
doyaaaaaken
September 22, 2021
Tweet
Share
More Decks by doyaaaaaken
See All by doyaaaaaken
コンパウンドスタートアップの“疎結合すぎない”チーム設計
doyaaaaaken
5
1.7k
スマートラウンドで試してみた ChatGPT活用成功/失敗事例8選!
doyaaaaaken
3
4.5k
Kotlin製自作OSSの普及戦略 ~kotlin-csvの実例を元に~ @Kotlin Fest 2022
doyaaaaaken
3
940
20220721 小規模フルリモート組織における入社者オンボーディング設計
doyaaaaaken
0
420
エンジニアによる事業指標計測のススメ
doyaaaaaken
1
460
プラットフォーム型SaaSにおけるマルチテナント設計
doyaaaaaken
5
2.9k
考えることを仕組み化する
doyaaaaaken
1
750
プルリクへのセルフコメントという小技
doyaaaaaken
0
660
先取りKtor2.0
doyaaaaaken
1
690
Other Decks in Programming
See All in Programming
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
260
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
250
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
500
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.8k
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
280
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
550
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.5k
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
940
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
390
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
110
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
140
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
150
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.6k
GraphQLの誤解/rethinking-graphql
sonatard
75
11k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
280
How to build a perfect <img>
jonoalderson
1
5.2k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
280
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
190
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
140
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Transcript
Kotlinʹ͓͚ΔFactoryϝιουͷ ࣮ύλʔϯ Server-Side Kotlin Study #2 2021/09/22 খࢁ݈ଠ(Kenta Koyama) @doyaaaaaaken
ࣗݾհ • ࣄ • גࣜձࣾsmartround ۀϝϯόʔ / CTO • αʔόαΠυKotlinʢKtorʣɾVueJSΛࠓΑ͘ॻ͍͍ͯ·͢
• OSS׆ಈ • kotlin-csvͷ࡞ऀʢ⭐: 300overʣ • KtorɾExposedɾkotestͷίϯτϦϏϡʔτ
͢༰ Kotlinʹ͓͚ΔFactoryϝιουͷ࣮ύλʔϯ ʹ͍ͭͯհ ࢀߟɿEffective Kotlin ɹɹɹItem33: Consider factory functions instead
of constructors
͜ͷൃදʹ͓͚Δ”Factoryϝιου”ͷఆٛ ʰΠϯελϯεੜΛߦ͏ͨΊͷϝιουʱͱ͍͏ఆٛͰଊ͍͑ͯͩ͘͞ ※ GoFʹΑΔσβΠϯύλʔϯͷ”Factoryύλʔϯ”ͱҟͳΓ·͢ ʰίϯετϥΫλͷݺͼग़͠ʹΑΔΠϯελϯεੜʱͰͳ͘ ʰϝιουܦ༝ͰͷΠϯελϯεੜํ๏ʢʹFactoryϝιουʣʱΛ ͏͖࣌ɾ͍ํʹ͍ͭͯͷհͰ͢
࣍ 1. ίϯετϥΫλΑΓFactoryϝιου͕༏Ε͍ͯΔ 5ͭ 2. KotlinͰͷFactoryϝιου࣮ͷॻ͖ํ 5ύλʔϯ
࣍ 1. ίϯετϥΫλΑΓFactoryϝιου͕༏Ε͍ͯΔ 5ͭ 2. KotlinͰͷFactoryϝιου࣮ͷॻ͖ํ 5ύλʔϯ
ᶃ: ϝιουʹ໊લ͕͚ͭΒΕΔ
ᶄ: ฦΓΛαϒλΠϓʹͰ͖Δ
ᶅ: ඞͣ͠Πϯελϯεੜ͠ͳͯ͘ྑ͍
ᶆ: ՄࢹੑΛॊೈʹ੍ޚͰ͖Δ
ᶇ: ҾΛ͖ʹఆٛͰ͖Δ
͜͜·Ͱͷ·ͱΊ FactoryϝιουίϯετϥΫλͱൺֱͯ͠ॊೈੑ͕ߴ͍ͨΊ έʔεʹԠͯ͡͏͜ͱΛݕ౼͢Δͱྑ͍ <ݸਓతݟղ> • ίϯετϥΫλΛ͏ͱྑ͍έʔε • γϯϓϧ͞Λٻ͍ͨ͠έʔεʢdata classͰDTO࡞Δ͚ͩͷ࣌ͱ͔యܕྫʣ •
FactoryϝιουΛ͏ͱྑ͍έʔε • ॊೈੑΛ͍ͨͤͨέʔε • Πϯελϯεੜํ๏͕ෳύλʔϯ͋ΔέʔεʢηΧϯμϦίϯετϥΫλ͏ΑΓFactoryϝιουͷ΄͏໊͕લͱ ͔͔Βҙਤ͕Θ͔Γ͍͢ʣ • ΠϯελϯεੜϩδοΫ͕ෳࡶͳέʔεʢͦͦίϯετϥΫλͩͱ࣮ݱͰ͖ͳ͍έʔεʣ • Πϯελϯεੜํ๏Λ͋Δఔ੍ݶ͍ͨ͠έʔεʢίϯετϥΫλͩͱࣗ༝͕ߴ͗͢Δͱײ͡Δέʔεʣ
࣍ 1. ίϯετϥΫλΑΓFactoryϝιου͕༏Ε͍ͯΔ 5ͭ 2. KotlinͰͷFactoryϝιου࣮ͷॻ͖ํ 5ύλʔϯ
ᶃ Companion Object Factory Function • Javaͷstaticؔͱࣅ͍ͯΔҰ൪ΦʔιυοΫεͳॻ͖ํ
ᶄ Top-Level Factory Function • listOf, mapOfͱ͔͜ͷύλʔϯ • publicʹͯ͠ϓϩδΣΫτશମͰ͏utilityؔʹ •
privateʹͯ͠ϑΝΠϧͰͷΈ༗ޮͳFactoryؔʹ
ᶅ Extension Factory Function • companion object͕ʢྫ͑ϥΠϒϥϦʹ͋ΔͳͲͯ͠ʣमਖ਼Ͱ͖ͳ͍ ͱ͖ʹ༗༻
ᶆ Fake Constructors
ᶇ Methods on Factory Class • ͍ΘΏΔBuilderύλʔϯ • KotlinͩͱBuilderύλʔϯΛ͏͖έʔεগͳ͍ʢ໊લ͖ҾɾσϑΥϧτҾͰସՄೳʣ
ݸਓతݟղ • جຊతʹύλʔϯᶃɾᶄͷΈͰे • ଞͷύλʔϯ಄ͷମૢ • ʰͲͷύλʔϯʹ͢Δ͔ʱΑΓ ʰίϯετϥΫλʹ͢Δ͔Factoryϝιουʹ͢Δ͔ʱͷ΄͏͕େࣄ
ձࣾએ smartroundͰݱࡏΤϯδχΞΛઈࢍืू͍ͯ͠·͢ʂʢ˞෭ۀՄɾϑϧϦϞʔτʣ ͚ͩฉ͖͍ͨํେܴͳͷͰWantedlyɾTwitter DM͔Β͓ؾܰʹ͝Ԡื͍ͩ͘͞ʂ ɾελʔτΞοϓ1,800ࣾɾࢿՈ100͕ࣾར༻ ɾKotlinɾVue.jsɾAWSΛར༻ ɾࣾһ10໊ͷϑΣʔζͰݱࡏੵۃ࠾༻த
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ @doyaaaaaken