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
実践、Interface
Search
おぎ
February 11, 2024
1
1.7k
実践、Interface
PHPConference関西2024の発表資料です
おぎ
February 11, 2024
Tweet
Share
More Decks by おぎ
See All by おぎ
とあるWebエンジニアの生成AI活用事例
togishima
0
63
設計、Interface
togishima
0
45
PHPerを続ける理由
togishima
0
69
闇のPHPからの防衛術
togishima
0
180
Monlogの実装に学ぶInterfaceのつかいどころ
togishima
0
1.6k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Site-Speed That Sticks
csswizardry
4
380
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Typedesign – Prime Four
hannesfritz
40
2.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Rails Girls Zürich Keynote
gr2m
94
13k
How to train your dragon (web standard)
notwaldorf
91
5.8k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
960
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Transcript
実践、Interface PHPカンファレンス関西2024
自己紹介
名前:おぎ PHPer歴:4年目(自称にわか) 住んでるところ:秘境グンマー 所属:Innovator Japan.inc 特技:スノーボード
過去の発表等
Innovator Japan Inc. 日本発のビジネスデザインカンパニー 「人の可能性を最大限に引き出し、ウェルビーイングな社会を実現する 」
宣伝終わり
実践、Interface PHPカンファレンス関西2024
今日の話 • Interfaceで何ができるの? • Interfaceの何が嬉しいの? • まとめ
Interfaceで何ができるの?
例:会員制のメディアサイト よくある機能 - ログインの有無による表示の切り替え - 会員ステータスに応じたコンテンツの出し分け よくある追加要件 - 会員ステータスの種類を追加したい サンプルコードの段階を追いながら考えてみましょう
①素朴な実装
テンプレート直書き!!
①素朴な実装の問題点 • Viewにロジックが漏れているので会員が増えるたびに無限に分岐 が入り組んでいく(つらい) • 微妙に変数名やHTMLが変わっているとgrep検索でも引っかからな いので修正漏れが発生する(つらい) • テンプレートからどんな見た目になるのかが全く想像できない (つらい)
②具象への依存
Bladeのコードが抽象化された!
Postモデル内は分岐
②具象への依存の問題点 • テストはできるようになった • 会員を追加するのにUserモデル以外にPostモデルも修正が必要 (ウッ!) • そして多分似たような感じで会員のステータスに依存している箇所をすべて直す羽 目になる (つらい)
一つの変更に対して波及する箇所が多すぎる!🥺
③抽象への依存
③抽象への依存
③抽象への依存のメリット 抽象に依存することで使う側のコードがシンプルに
抽象に依存したことで シンプルで拡張性の高いコードになった🎉
Interfaceの何が嬉しいのか?
抽象に依存したことで シンプルで拡張性の高いコードになった🎉
というのは 結果の一つであって本質ではない
https://amzn.asia/d/9WkYDgp OO(オブジェクト指向)とは「ポリモーフィズム を使用することでシステムにあるすべてのソー スコードの依存関係を絶対的に制御する能 力」である。 〜Robert C. Martin〜
None
直接の依存がなくなった! 矢印の向きが逆転した!
Interfaceの効能 1. 薄いレイヤーが実装同士の間に生まれ、依存の向きが変わった (依存関係逆転原則) 2. 抽象に依存するようになったことで、使う側のプログラムが安定した (安定依存の原則) 3. 多彩なインスタンスを注入して拡張できるようになった (多態性)
任意の方向へ依存を向けることで 何に依存して、何に依存しないかを 選ぶことができる
まとめ
Interfaceの話は「アーキテクチャ」の話 ( ≠ EASY)
Interfaceが不要なパターン • 極端に小さいシステム → 2週間〜1ヶ月で書き直しできるようなシステム • 複雑でないシステム → 処理の中身の意図まですぐに把握できるコードベース •
短命・使い捨てのシステム → MVP等の場合は作り込むコストのほうが嵩む
Interfaceがあった方が良いパターン • 複数開発者が必要になる規模のシステム → 複数開発者で認識や概念の齟齬が起きにくい • 概念が複雑になりがちなシステム → 「接合部」を作ることで影響範囲を閉じることができる •
長期間稼働する前提のシステム → 開発者が入れ替わった時も制約がガイドの役割を果たす
https://x.com/suthio_/status/1691972270208803260?s=20
つまり「チーム開発」の話
設計するアーキテクトだけでなく プログラマも理解する必要がある
おすすめの発表/書籍
https://fortee.jp/phpcon-kansai2024/proposal/b3f6ed97-8551-4 0da-90b1-3a14697df303
https://fortee.jp/phpcon-kansai2024/proposal/0d9231ed-2f64-4 908-bd16-863922f56c0f
https://fortee.jp/oocon-2024/proposal/857fd0a4-b04e-41f1-a0f3-6bbeb3fa0779
https://amzn.asia/d/dj7nHWu https://amzn.asia/d/c0yxnFB
https://amzn.asia/d/cBgQx2Q https://amzn.asia/d/aDdKgzX https://amzn.asia/d/aDdKgzX
賢くInterfaceを使って よりよい設計・開発をしていきましょう👍
ご清聴ありがとうございました🙇