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
Bye-bye Magic Number
Search
hideki kinjyo
PRO
September 18, 2018
1
1.3k
Bye-bye Magic Number
CakePHP3アプリケーションで、「マジックナンバー」的な値とどう向き合っていくかを考えた結果
hideki kinjyo
PRO
September 18, 2018
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
530
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
270
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
3
530
SPLから始める「データ構造」入門
o0h
PRO
7
1.8k
PHPUnit11の新しい仲間たち
o0h
PRO
3
390
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
61
20k
パンフ記事 「初めてのリファクタリング!」 の裏側 #phperkaigi
o0h
PRO
2
160
phpunit/php-code-coverageって何をしてるんだ #phperkaigi
o0h
PRO
3
1.4k
Composerを便利に使うために私がやっていること #phperkaigi
o0h
PRO
1
2.8k
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
5
200
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Speed Design
sergeychernyshev
25
730
Unsuck your backbone
ammeep
669
57k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
Mobile First: as difficult as doing things right
swwweet
222
9k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
jQuery: Nuts, Bolts and Bling
dougneiner
62
7.6k
Music & Morning Musume
bryan
46
6.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
172
50k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Transcript
Bye-Bye Magic Number ʙʮࣙॻʯΛ࡞ͬͨʙ Hideki Kinjyo twitter: @o0h_ / github:
o0h
ࣗݾհ • ίωώτגࣜձࣾ • αʔόʔαΠυΤϯδχΞ • ओʹCakePHPͳͲ
ࠓ͓͢Δ͜ͱ • ϚδοΫφϯόʔʹউͭͧɾɾɾʂ • ͦͷͨΊʹ”Ϟϊ”Λ࡞Γ·ͨ͠
Έͳ͞Μɺ ΞϓϦέʔγϣϯͷʮఆʯ ͷཧͲ͏͍ͯ͠·͔͢ʁ ϚδοΫφϯόʔ తͳͭ
͜͏͍͏ͭ • Ϣʔβʔͷొঢ়ଶ͕ɾɾ • 0: ϝʔϧΞυϨε֬ೝͪ • 1: ࢧ͍ใ֬ೝͪ •
2: ొྃ
ᶃϚδοΫφϯόʔਏ͍
ᶃϚδοΫφϯόʔਏ͍ • ಡΜͰ͍ͯʮಥવग़͖ͯͨʯײ͡ • ʮಛผͳҙຯͷ͋Δʯʁʮྔͱ͔߹͍Λද͍ͯ͠ Δʯʁ • ผ͕ͮ͠Β͍ • grep͠ʹ͘͞
=> ϦϑΝΫλ͠ʹ͘͞ • etc… (άάͬͨΒ৭ʑग़ͯ͘ΔͷͰׂѪ
ᶄϞσϧΫϥεͷఆʹʂ
ᶄϞσϧΫϥεͷఆʹʂ • ୯ޠͰ໊લ͕͚ΒΕ͍ͯΔ͔Β͔Γ͢ ͍Ͷʂ • ؔ࿈͢ΔࣝΛ1Օॴʹ·ͱΊΒΕ͔ͯΓ ͍͢Ͷʂ(scoped, contextual)
ᶄϞσϧΫϥεͷఆʹʂ • ʮͲͷΫϥεʹஔ͔͘ʯ·͍͠ • ͋ΕɺTableʹ࣋ͨͤΔʁEntityʹ࣋ͨͤ Δʁ • ͦͦϞσϧͱؔ࿈͠ͳ͍ࣝͲ͏͢Δʁ
ᶅConfigureΫϥεͰѻ͏ʂ
ᶅConfigureΫϥεͰѻ͏ʂ • ͜ΕͰ໊͚Մೳʂ • ֊ԽͰ͖Δʂ • ʮͲͷΫϥεʹଐ͢Δ͔ʯΛҙࣝͤͣʹ͓͚ Δʂ
ᶅConfigureΫϥεͰѻ͏ʂ • Ζ͏ͱࢥ͑ॻ͖͑ΒΕͪΌ͏ΑͶ… • ७ਮͳʮΞϓϦέʔγϣϯͷઃఆʯͱ ͍ࠞͬͯ͟ΔͷɺԿͱͳ͘ؾ࣋ͪѱ͍͔… • ෆ༻ҙʹ͘ͳΓ͕ͪɻ • ͪͳΈʹɺ
ίωώτʹ2,181ߦͷconstants.php͕͋Γ·͢
ͳΜ͔ྑ͍ͷͳ͍ͷ͔ͳʂ
ͭͬͯ͘Έͨʂ
None
ͳΜͰ͔͢ • ఆΫϥεΛϦονʹ͠·ͨ͠Έ͍ͨͳͷ • ΫϥεΛఆٛͯ͠ ʮ໊લʯͱʮʯͷએݴΛ͓ͯ͘͠ • ʮࣙॻʯ͕͍ͬͯΔใΛ ʮEnumʯͱͯ͠औΓग़ͤΔΑ͏ʹͳΔ •
PHPʹྻڍܕ͕ͳ͍͔ΒΦϨΦϨ࣮
ʮࣙॻʯͷ࡞Γํ • AbstractΫϥεΛܧঝͯ͠ • `ENUM_` prefixΛ࣋ͬͨconstΛએݴ͢Δ
ʮࣙॻʯͷ࡞Γํ
ʮࣙॻʯͷ͍ํ
ࣙॻͷԠ༻ᶃʮTypeʯ • Database\Type\EnumType • marshal/toPHPͰEnumΛѻ͑ΔΑ͏ʹ͢Δ
ࣙॻͷԠ༻ᶃʮEnumTypeʯ
ࣙॻͷԠ༻ᶃʮEnumTypeʯ
ࣙॻͷԠ༻ᶄʮValidationʯ • ʮରԠ͢Δࣙॻʹએݴ͞Ε͍ͯΔ͔ʯΛ νΣοΫ͢ΔValidationProvider • ʮ͜ͷྻ͜ͷࣙॻʯͱ͍͏ͷΛ ηοτ͓ͯ͘͠ͱɺະએݴͳΛڋ൱Ͱ͖Δ
ࣙॻͷԠ༻ᶄʮValidationʯ
ࣙॻͷԠ༻ᶄʮValidationʯ
·ͱΊ • લੈͷΞϓϦέʔγϣϯͰ ϚδοΫφϯόʔconstansͷരൃ͕ਏͯ͘ɾɾ • CakePHP3ͷPJ্ཱͪ͛࣌ʹ ݁ߏͳίετΛ͔͚ͭͭɺ͜ͷػߏͷ࡞Λߦ͍·ͨ͠ • ݁Ռɺॻ͖ํ͕౷Ұ͞Ε͍͍ͯײ͡ •
ͱΓΘ͚ɺCakePHP3ͷORMपΓ͔ͳΓڧԽ͞Ε͍ΔͷͰ Type/ValidationपΓͱͷ࿈ܞ͕ศར • ಠཱͨ͠ϨϙδτϦʹ͓͍ͨࣄͰϙʔλϏϦςΟ
͝ਗ਼ௌɺ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ ࣮ͷͱ͔͍ͯ͠ͳ͍ͷͰ ͓ؾܰʹฉ͍͍ͯͩ͘͞