Slide 1

Slide 1 text

Kotlinʹ͓͚ΔFactoryϝιουͷ ࣮૷ύλʔϯ Server-Side Kotlin Study #2 2021/09/22 খࢁ݈ଠ(Kenta Koyama) @doyaaaaaaken

Slide 2

Slide 2 text

ࣗݾ঺հ • ࢓ࣄ • גࣜձࣾsmartround ૑ۀϝϯόʔ / CTO • αʔόαΠυKotlinʢKtorʣɾVueJSΛࠓ͸Α͘ॻ͍͍ͯ·͢ • OSS׆ಈ • kotlin-csvͷ࡞ऀʢ⭐: 300overʣ • KtorɾExposedɾkotest౳΁ͷίϯτϦϏϡʔτ

Slide 3

Slide 3 text

࿩͢಺༰ Kotlinʹ͓͚ΔFactoryϝιουͷ࣮૷ύλʔϯ ʹ͍ͭͯ঺հ ࢀߟɿEffective Kotlin ɹɹɹItem33: Consider factory functions instead of constructors

Slide 4

Slide 4 text

͜ͷൃද಺ʹ͓͚Δ”Factoryϝιου”ͷఆٛ ʰΠϯελϯεੜ੒Λߦ͏ͨΊͷϝιουʱͱ͍͏ఆٛͰଊ͍͑ͯͩ͘͞ ※ GoFʹΑΔσβΠϯύλʔϯͷ”Factoryύλʔϯ”ͱ͸ҟͳΓ·͢ ʰίϯετϥΫλͷ௚઀ݺͼग़͠ʹΑΔΠϯελϯεੜ੒ʱͰ͸ͳ͘ ʰϝιουܦ༝ͰͷΠϯελϯεੜ੒ํ๏ʢʹFactoryϝιουʣʱΛ ࢖͏΂͖࣌ɾ࢖͍ํʹ͍ͭͯͷ঺հͰ͢

Slide 5

Slide 5 text

໨࣍ 1. ίϯετϥΫλΑΓFactoryϝιου͕༏Ε͍ͯΔ఺ 5ͭ 2. KotlinͰͷFactoryϝιου࣮૷ͷॻ͖ํ 5ύλʔϯ

Slide 6

Slide 6 text

໨࣍ 1. ίϯετϥΫλΑΓFactoryϝιου͕༏Ε͍ͯΔ఺ 5ͭ 2. KotlinͰͷFactoryϝιου࣮૷ͷॻ͖ํ 5ύλʔϯ

Slide 7

Slide 7 text

ᶃ: ϝιουʹ໊લ͕͚ͭΒΕΔ

Slide 8

Slide 8 text

ᶄ: ฦΓ஋ΛαϒλΠϓʹͰ͖Δ

Slide 9

Slide 9 text

ᶅ: ඞͣ͠΋Πϯελϯεੜ੒͠ͳͯ͘ྑ͍

Slide 10

Slide 10 text

ᶆ: ՄࢹੑΛॊೈʹ੍ޚͰ͖Δ

Slide 11

Slide 11 text

ᶇ: Ҿ਺Λ޷͖ʹఆٛͰ͖Δ

Slide 12

Slide 12 text

͜͜·Ͱͷ·ͱΊ Factoryϝιου͸ίϯετϥΫλͱൺֱͯ͠ॊೈੑ͕ߴ͍ͨΊ έʔεʹԠͯ͡࢖͏͜ͱΛݕ౼͢Δͱྑ͍ <ݸਓతݟղ> • ίϯετϥΫλΛ࢖͏ͱྑ͍έʔε • γϯϓϧ͞Λ௥ٻ͍ͨ͠έʔεʢdata classͰDTO࡞Δ͚ͩͷ࣌ͱ͔యܕྫʣ • FactoryϝιουΛ࢖͏ͱྑ͍έʔε • ॊೈੑΛ΋͍ͨͤͨέʔε • Πϯελϯεੜ੒ํ๏͕ෳ਺ύλʔϯ͋ΔέʔεʢηΧϯμϦίϯετϥΫλ࢖͏ΑΓ͸Factoryϝιουͷ΄͏໊͕લͱ ͔͔Βҙਤ͕Θ͔Γ΍͍͢ʣ • Πϯελϯεੜ੒ϩδοΫ͕ෳࡶͳέʔεʢͦ΋ͦ΋ίϯετϥΫλͩͱ࣮ݱͰ͖ͳ͍έʔεʣ • Πϯελϯεੜ੒ํ๏Λ͋Δఔ౓੍ݶ͍ͨ͠έʔεʢίϯετϥΫλͩͱࣗ༝౓͕ߴ͗͢Δͱײ͡Δέʔεʣ

Slide 13

Slide 13 text

໨࣍ 1. ίϯετϥΫλΑΓFactoryϝιου͕༏Ε͍ͯΔ఺ 5ͭ 2. KotlinͰͷFactoryϝιου࣮૷ͷॻ͖ํ 5ύλʔϯ

Slide 14

Slide 14 text

ᶃ Companion Object Factory Function • Javaͷstaticؔ਺ͱࣅ͍ͯΔҰ൪ΦʔιυοΫεͳॻ͖ํ

Slide 15

Slide 15 text

ᶄ Top-Level Factory Function • listOf, mapOfͱ͔͸͜ͷύλʔϯ • publicʹͯ͠ϓϩδΣΫτશମͰ࢖͏utilityؔ਺ʹ΋ • privateʹͯ͠ϑΝΠϧ಺ͰͷΈ༗ޮͳFactoryؔ਺ʹ΋

Slide 16

Slide 16 text

ᶅ Extension Factory Function • companion object͕ʢྫ͑͹ϥΠϒϥϦ಺ʹ͋ΔͳͲͯ͠ʣमਖ਼Ͱ͖ͳ͍ ͱ͖ʹ༗༻

Slide 17

Slide 17 text

ᶆ Fake Constructors

Slide 18

Slide 18 text

ᶇ Methods on Factory Class • ͍ΘΏΔBuilderύλʔϯ • KotlinͩͱBuilderύλʔϯΛ࢖͏΂͖έʔε͸গͳ͍ʢ໊લ෇͖Ҿ਺ɾσϑΥϧτҾ਺Ͱ୅ସՄೳʣ

Slide 19

Slide 19 text

ݸਓతݟղ • جຊతʹ͸ύλʔϯᶃɾᶄͷΈͰे෼ • ଞͷύλʔϯ͸಄ͷମૢ • ʰͲͷύλʔϯʹ͢Δ͔ʱΑΓ΋ ʰίϯετϥΫλʹ͢Δ͔Factoryϝιουʹ͢Δ͔ʱͷ΄͏͕େࣄ

Slide 20

Slide 20 text

ձࣾએ఻ smartroundͰ͸ݱࡏΤϯδχΞΛઈࢍืू͍ͯ͠·͢ʂʢ˞෭ۀՄɾϑϧϦϞʔτʣ ࿩͚ͩฉ͖͍ͨํ΋େ׻ܴͳͷͰWantedlyɾTwitter DM͔Β͓ؾܰʹ͝Ԡื͍ͩ͘͞ʂ ɾελʔτΞοϓ1,800ࣾɾ౤ࢿՈ100͕ࣾར༻ ɾKotlinɾVue.jsɾAWSΛར༻ ɾࣾһ਺10໊௒ͷϑΣʔζͰݱࡏੵۃ࠾༻த

Slide 21

Slide 21 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ @doyaaaaaken