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.8k
実践、Interface
PHPConference関西2024の発表資料です
おぎ
February 11, 2024
Tweet
Share
More Decks by おぎ
See All by おぎ
インターフェース設計のコツとツボ
togishima
2
820
100行で書けるPSR-11
togishima
0
430
ITなんもわからん素人がアジャイルと出会うまで
togishima
1
81
とあるWebエンジニアの生成AI活用事例
togishima
0
110
設計、Interface
togishima
0
67
PHPerを続ける理由
togishima
0
95
闇のPHPからの防衛術
togishima
0
230
Monlogの実装に学ぶInterfaceのつかいどころ
togishima
0
1.7k
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
RailsConf 2023
tenderlove
30
1.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
740
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
How to train your dragon (web standard)
notwaldorf
95
6.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
234
140k
Code Reviewing Like a Champion
maltzj
524
40k
Why Our Code Smells
bkeepers
PRO
336
57k
We Have a Design System, Now What?
morganepeng
53
7.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
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を使って よりよい設計・開発をしていきましょう👍
ご清聴ありがとうございました🙇