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.4k
Bye-bye Magic Number
CakePHP3アプリケーションで、「マジックナンバー」的な値とどう向き合っていくかを考えた結果
hideki kinjyo
PRO
September 18, 2018
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
230
Composerの依存解決 #phpstudy
o0h
PRO
0
99
「影響が少ない」を自分の目でみてみる
o0h
PRO
3
1.6k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.5k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
23
5.1k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
10
3.6k
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
650
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
330
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
4
650
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
69
11k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Why You Should Never Use an ORM
jnunemaker
PRO
57
9.4k
Raft: Consensus for Rubyists
vanstee
140
7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Building Applications with DynamoDB
mza
95
6.5k
Fireside Chat
paigeccino
37
3.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Practical Orchestrator
shlominoach
188
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
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पΓͱͷ࿈ܞ͕ศར • ಠཱͨ͠ϨϙδτϦʹ͓͍ͨࣄͰϙʔλϏϦςΟ
͝ਗ਼ௌɺ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ ࣮ͷͱ͔͍ͯ͠ͳ͍ͷͰ ͓ؾܰʹฉ͍͍ͯͩ͘͞