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
SPAのAPI開発の「やりづらさ」をDDDとオブジェクト指向の発想で解決する
Search
Hiromi Hishida
December 11, 2020
Programming
4
2.6k
SPAのAPI開発の「やりづらさ」をDDDとオブジェクト指向の発想で解決する
PHPカンファレンス2020 前夜祭にて発表
Hiromi Hishida
December 11, 2020
Tweet
Share
More Decks by Hiromi Hishida
See All by Hiromi Hishida
100%出しきれないのを許すスクラムチーム運営
77web
1
69
マイクロサービスがほしいと思ったときに本当に必要だったもの〜なぜ人は共通基盤の夢を見るのか〜 / why microservice
77web
5
820
モデルとはなにか / what is model?
77web
6
2.2k
たとえば、唐揚げを揚げながらPHPコードを書く技術 #phpstudy
77web
1
290
ベテランのバグ調査の秘訣、こっそり教えちゃいます。
77web
22
8.8k
Symfony+Doctrine ORMで始める安全なモジュラモノリス
77web
2
3.7k
他人がはやく読めるコードを書く ために
77web
11
4.6k
すばやく実装するための戦略とテクニック2023年版 #prtimes_dev
77web
9
2.5k
「MVPから作る」ってどういうこと?
77web
0
750
Other Decks in Programming
See All in Programming
php-src debug マニュアル
onopon
1
650
ファイル先頭の use の意味、説明できますか? 〜PHP の namespace と autoloading の関係を正しく理解しよう〜 / namespace and autoloading in php
okashoi
2
400
「Hono遍歴」と「HonoXでブログ作成」
yasu551
0
170
sbt-assemblyにハマってDB接続できず時間が溶けた話
wakye5815
1
660
Faster, greener, and happier- why Quarkus should be your next tech stack
hollycummins
0
130
Reckoner の Scala プロジェクトにおける オブザーバビリティの取り組み / Observability Initiatives in Reckoner's Scala Project
nomadblacky
0
820
WasmOS: Wasmを実行する自作Microkernel
riru
0
360
まっちすいっち戦争 / match vs switch
takuyakatsusa
1
630
Honoとhtmx
yusukebe
6
1.1k
PHPでOfficeファイルを取り扱う! PHP Officeライブラリを プロダクトに組み込んだ話
hirobe1999
0
730
decksh - a little language for decks
ajstarks
4
18k
C#でのPlaywrightを使ったE2Eテストの実際
tomokusaba
0
210
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
319
23k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
11
1.4k
How to Ace a Technical Interview
jacobian
272
22k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
Automating Front-end Workflow
addyosmani
1353
200k
For a Future-Friendly Web
brad_frost
170
8.8k
Into the Great Unknown - MozCon
thekraken
10
810
Large-scale JavaScript Application Architecture
addyosmani
501
110k
Producing Creativity
orderedlist
PRO
335
39k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
113
18k
Art, The Web, and Tiny UX
lynnandtonic
288
19k
GitHub's CSS Performance
jonrohan
1023
450k
Transcript
CZ!XFCUI%FD BU1)1$POGFSFODF 41"ͷ"1*։ൃͷΓͮΒ͞Λ%%% ͱΦϒδΣΫτࢦͷൃͰղܾ͢Δ
w ϑϦʔϥϯεˠΧϧςοτίϛϡχ έʔγϣϯζ։ൃ෦ɺݱࡏόοΫΤ ϯυϦʔυΤϯδχΞ w ຊ4ZNGPOZϢʔβʔձʢ։ళٳ ۀঢ়ଶʜʣ w ʮਓʹΘΕΔγεςϜʯΛ࡞Γͨ ͯ͘ɺϝϯςφϏϦςΟͷߴ͍։ൃ
Λࢦͯ͠νʔϜϝϯόʔͱҰॹʹ ʑฃಆதʂ w NPUIFSPG
ର w 41"ͷ"1* w TFSWFSUPTFSWFSͷ"1*ݪଇͱͯ͠είʔϓ֎Ͱ͕͢ɺࢀߟʹͰ͖Δ෦ ͋Δ͔͠Ε·ͤΜ
ݹ͖ྑ͖ϑϩϯτΤϯυ։ൃ QIQ PO$MJDLlʜz ʢಉ͡ਓ͕Δʣ
ݱͷϑϩϯτΤϯυ։ൃ <?php @Component({}) export class MyComponent extends OnInit {...} ʢҧ͏ਓ͕Δʣ
ݹ͖ྑ͖"1*։ൃ w TFSWFSUPTFSWFSࣗࣾͷσʔλΛଞࣾʢύʔτφʔʣʹެ։͢Δ w "NB[POΞιγΤΠτ8FCαʔϏεʢݱࡏͷ1SPEVDU"EWFSUJTJOH"1*ʣ w (PPHMF.BQT"1* w (PPHMFࠂ"1* :BIPPࠂ"1*ͳͲ
w ʮݹ͖ྑ͖ʯͱॻ͖·͕ͨ͠ݱࡏͰͪΖΜੜ͖͍ͯ·͢
ݱͷ"1*։ൃ w TFSWFSUPCSPXTFSPSTFSWFSUPNPCJMFBQQࣗࣾͷσʔλΛࣗࣾͷ41"ʢϑ ϩϯτΤϯυʣʹҾ͖͢ w ݹ͖ྑ͖"1*։ൃʹͳ͍ಛघੑ͕͋Δ
41"ͷ"1*։ൃͷಛघੑ w "1*Λ࡞ΔਓͱϑϩϯτΤϯυΛ࡞Δਓʢʹ"1*Λ͏ਓʣ͕ಉ͡৫ʹଐ͠ ͓ͯΓɺ྆ऀͷࣄΛ౷߹ͯͭ͠ͷγεςϜΛ࡞Ζ͏ͱ͍ͯ͠Δ͜ͱ w ͱ͍͑ɺݱͰେاۀɾ࣏ࣗମʢΦʔϓϯσʔλʣҎ֎ͷେ ͷ։ൃऀͷߦ͏"1*։ൃ41"ͷ"1*։ൃͳͷͰɺಛघੑͰͳͦ͘ Ε͕ී௨ʁ
41"ͷ"1*։ൃͷΓͮΒ͞ w ϩδοΫͷॏෳ w τϥϯβΫγϣϯͰ͖ͳ͍ w ͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁʂ w O
ϩδοΫͷॏෳ w όοΫΤϯυͱϑϩϯτΤϯυͷ྆ํʹಉ͡ϩδοΫ͕ݱΕΔ
ϩδοΫͷॏෳ
ϩδοΫͷॏෳ (&5BQJJUFNT 0, \ lOBNFzzQIQDPOεςοΧʔz lQSJDFz ^ MFUQSJDFEBUBQSJDF
QSJDFQSJDF
ϩδοΫͷॏෳ w όοΫΤϯυʹଘࡏ͢ΔϩδοΫόοΫΤϯυଆͰӅṭ͢Δ w ϑϩϯτΤϯυϑϩϯτΤϯυͷؔ৺ࣄʹ͍͠ w Ξχϝʔγϣϯ w Ϋϩεϒϥβ w
69
ϩδοΫͷॏෳ (&5BQJJUFNT 0, \ lOBNFzzQIQDPOεςοΧʔz lOFUQSJDFz lUBYz
lQSJDFz ^ MFUQSJDFEBUBQSJDF QSJDFOFUQSJDF
τϥϯβΫγϣϯͰ͖ͳ͍ w αʔόʔଆͷঢ়ଶ͕มԽ͢ΔͷΛࢭΊΒΕͳ͍
τϥϯβΫγϣϯͰ͖ͳ͍
τϥϯβΫγϣϯͰ͖ͳ͍ (&5BQJJUFNT 0, \ lTUPDLz ^ 1045BQJPSEFS 0, \ lJEz
^ 1045BQJPSEFSJUFN
τϥϯβΫγϣϯͰ͖ͳ͍ (&5BQJJUFNT 0, \ lTUPDLz ^ 1045BQJPSEFS 0, \ lJEz
^ 1045BQJPSEFSJUFN ࡏݿΕൃੜʂ
τϥϯβΫγϣϯͰ͖ͳ͍ w UFMMEPO`UBTLʮίʔώʔͪΐ͏͍ͩʂʯ w ϩδοΫͷӅṭͷҰछͰ͋Δʢ0SEFSIBT.BOZ0SEFS*UFNTͰ͋Δ͜ͱ ΛϑϩϯτΤϯυΒͳͯ͘ྑ͍ʣ w τϥϯβΫγϣϯαʔόʔͰߦ͏͜ͱ͕Ͱ͖Δ
τϥϯβΫγϣϯͰ͖ͳ͍ 1045BQJPSEFS\lJUFN@JETz<>^ ࡏݿ͕͋Ε͕ؼͬͯ͘Δ͕ɺͳ͚ΕͱͳΔ
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ w ಉ͡Α͏ͳσʔλΛ͏͔Βͱ"1*Λ͋ͪͪ͜Ͱ͍·Θͨ݁͠ՌɺཁΒͳ͘ ͳͬͨ"1*Λআͨͯ͘͠ଞͷ෦ʹӨڹ͕ग़ͦ͏ͰআͰ͖ͳ͍
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ (&5BQJBSUJDMFT MJNJUP⒎TFU 0, < \lUJUMFzzBBBz zCPEZzzBBBz^ \lUJUMFzzCCCz zCPEZzzCCCz^
> (&5BQJBSUJDMFT MJNJU 0, < \lUJUMFzzBBBz zCPEZzzBBBz^ \lUJUMFzzCCCz zCPEZzzCCCz^ >
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ (&5BQJBSUJDMFT MJNJUP⒎TFU 0, < \lUJUMFzzBBBz zCPEZzzBBBz^ \lUJUMFzzCCCz zCPEZzzCCCz^
> (&5BQJBSUJDMFT MJNJU 0, < \lUJUMFzzBBBz zCPEZzzBBBz^ \lUJUMFzzCCCz zCPEZzzCCCz^ > QBHFʹ͍͚ͨ͠ͲͰ͖ͳ͍ ΘΕͳ͍CPEZσʔλΛ͍࣋ͬͯΔ
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ w "1*431ʹ͠Α͏ w ϑϩϯτΤϯυ͔Βݟͯผͷ༻్ͳΒ"1*ผʹ͢Δ w ͪΖΜόοΫΤϯυͰϩδοΫ͕ڞ௨ͷ෦·ͱΊΕྑ͍
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ (&5BQJBSUJDMFT QBHF 0, < \lUJUMFzzBBBz zCPEZzzBBBz^ \lUJUMFzzCCCz zCPEZzzCCCz^
> (&5BQJMBUFTU@BSUJDMFT 0, < \lUJUMFzzBBBz^ \lUJUMFzzCCCz^ >
O w αʔόʔαΠυͰҰରଟͷϦϨʔγϣϯΛ࣋ͭΦϒδΣΫτΛऔಘ͠Α͏ͱ͠ ͯɺO ճͷϦΫΤετΛൃߦͯ͠͠·͏
O
O (&5BQJDBUFHPSJFT 0, < \lOBNFzz1)1z^ \lOBNFzz4ZNGPOZz^ > (&5BQJBSUJDMFT@DPVOU
DBUFHPSZ1)1 0, \ lDPVOUz ^ (&5BQJBSUJDMFT@DPVOU DBUFHPSZ4ZNGPOZ 0, \ lDPVOUz ^ ʢOճϦΫΤετʣ
O w O ΛղܾͰ͖ΔϨΠϠʔʢ42-ʣʹͤΔ w ܗ͕มΘΔͷͰɺผͷ໊લΛ͚ͭΔ w 2ͦΜͳ͜ͱ͍͍ͯ͠ͷʁϢʔβʔͷϝϯλϧϞσϧͱ߹Θͳ͍Μ͡Όͳ ͍ʁ
w "1*ͷϢʔβʔϑϩϯτΤϯυ͔ͩΒɺϑϩϯτΤϯυͷϝϯλϧϞσϧ ͱ%4-ʢ"1*ͷ63- ύϥϝʔλ ϨεϙϯεʣΛ߹ΘͤΑ͏
O (&5BQJDBUFHPSZ@XJUI@BSUJDMFT@DPVOU 0, < \lOBNFzz1)1z zBSUJDMFT@DPVOUz^ \lOBNFzz4ZNGPOZz zBSUJDMFT@DPVOUz^
>
༨ஊղܾυϝΠϯͱυϝΠϯͱϝϯλϧϞσϧ w ϑϩϯτΤϯυղܾυϝΠϯɺόοΫΤϯυղܾυϝΠϯɺۀυ ϝΠϯ w υϝΠϯۦಈઃܭͷରͱͳΔͷυϝΠϯ͚ͩͰͳ͍ w ࠷ऴϢʔβʔͷϝϯλϧϞσϧͱҰக͢Δ࣮Λ͍ͯͯ͠%#ਖ਼نԽͳΜͯ ͍ͭ·ͰܦͬͯͰ͖·ͤΜ w
ϢʔβʔͷϝϯλϧϞσϧʹҰகͤ͞Δ͖%4-
QIQ @Component({}) export class MyComponent extends OnInit {...} "1*
#*; 6*69
UIBOLZPV