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
デザインパターンを出自から深く理解する / understanding design patt...
Search
Kazuki Higashiguchi
October 11, 2019
Technology
7
5.1k
デザインパターンを出自から深く理解する / understanding design pattern from the origin
PHPカンファレンス沖縄 2019 前夜祭 で発表したデザインパターンの出自から特性を理解しようという内容です
Kazuki Higashiguchi
October 11, 2019
Tweet
Share
More Decks by Kazuki Higashiguchi
See All by Kazuki Higashiguchi
Design of a Stateful system for Robust Deployment and Observability
hgsgtk
0
1.2k
A guide to joining operational work in your new DevOps team
hgsgtk
1
1.3k
HTTP Tunneling in Go
hgsgtk
0
1.3k
ブラウザ自動操作技術の深層へ、直接触れて学ぶ WebDriver と Chrome DevTools Protocol
hgsgtk
3
6.4k
HTTP Server on random available port in Go
hgsgtk
0
920
Agile Testingを夢見たテスト自動化 〜ATDDへの挑戦から始まる 1年間の試行錯誤〜 / dreaming agile testing at basebank
hgsgtk
14
7.6k
Create Go WebDriver client from scratch
hgsgtk
1
2.1k
PHPでWeb Driver Clientを自作する〜己の手でブラウザ操作自動化を完全理解する方法〜 / phpcon2021
hgsgtk
2
2.4k
振り返りを積み上げて自分たちのプラクティスとして昇華•体得していくための仕組みと考え方 / ScrumFestMikawa2021
hgsgtk
3
2.4k
Other Decks in Technology
See All in Technology
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
The Rise of LLMOps
asei
8
1.7k
アプリエンジニアのためのGraphQL入門.pdf
spycwolf
0
100
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
310
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
3
630
複雑なState管理からの脱却
sansantech
PRO
1
150
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
870
rootlessコンテナのすゝめ - 研究室サーバーでもできる安全なコンテナ管理
kitsuya0828
3
390
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
370
Platform Engineering for Software Developers and Architects
syntasso
1
520
Zennのパフォーマンスモニタリングでやっていること
ryosukeigarashi
0
160
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
327
38k
A better future with KSS
kneath
238
17k
How STYLIGHT went responsive
nonsquared
95
5.2k
Unsuck your backbone
ammeep
668
57k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Producing Creativity
orderedlist
PRO
341
39k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Facilitating Awesome Meetings
lara
50
6.1k
It's Worth the Effort
3n
183
27k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Transcript
© - BASE, Inc. デザインパターンを 出⾃から深く理解する PHPカンファレンス沖縄 2019 前夜祭 .
. - @hgsgtk
© - BASE, Inc. 持ち帰っていただくこと • 「デザインパターン」を普段の視点ではあまり考え ない、その出⾃を視点に⾒る • 影響の⼤きい「パタン‧ランゲージ」を抑えた上
で、「デザインパターン」を⾒てみる
© - BASE, Inc. var_dump($hgsgtk); : @hgsgtk Kazuki Higashiguchi BASE
BANK, Inc. / Dev Division / Tech Lead Software Developer
© - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次
© - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次
© - BASE, Inc. デザインパターンとは • オブジェクト指向ソフトウェアを設計する際の経験 を記録、カタログ化したもの • ソフトウェア設計において繰り返し現れる構造をパ
ターンとしてまとめる • “種々の状況における設計上の⼀般的な問題の解法 に適⽤できるよう、オブジェクトやクラス間の通信 を記述したもの”
© - BASE, Inc. 1994年 GoF (Gang of Four) 1992年
OOPSLAで、Erich Gamma、Richard Helm、Ralph E. Johnson、John Matthew Vlissides の4⼈組が顔合わせ 1994年10⽉、書籍『オブジェクト指向における再利 ⽤のためのデザインパターン』を発表
© - BASE, Inc. 1994年『オブジェクト指向における再利⽤のためのデザインパターン』 https://www.amazon.co.jp/dp/
© - BASE, Inc. デザインパターン間の関連 https://www.simonvandyk.co.za/writes/ / / /software-design-patterns-in-c-uml
© - BASE, Inc. Abstract Factory Factory Method Singleton Builder
Prototype ⽣成に関するパターン
© - BASE, Inc. Adapter Composite Facade Bridge Decorator Flyweight
Proxy 構造に関するパターン
© - BASE, Inc. Chain of Responsibility Interpreter Mediator Command
Iterator Memento 振る舞いに関するパターン
© - BASE, Inc. デザインパターンのテンプレート(GoF Form)⼤枠 • パターン名: 設計における⽤語の語彙を増やすため •
問題: 問題と⽂脈 • 解法: 設計の要素、解法および責任、協調関係 • 結果: 適⽤した結果やトレードオフ
© - BASE, Inc. パターン名と分類 別名 適⽤可能性 ⽬的 動機 構造
協調関係 実装 構成要素 結果 デザインパターンのテンプレート(GoF Form)詳細
© - BASE, Inc. サンプルコード 関連するパターン 使⽤例 デザインパターンのテンプレート(GoF Form)
© - BASE, Inc. 例: Composite pattern https://www.codeproject.com/Articles/ /Illustrated-GOF-Design-Patterns-in-C-Part-II-Struc
© - BASE, Inc. パタン‧ランゲージの影響 “我々の成果は、Alexanderのものといろいろな意味 で似ている。どちらも、既存のシステムを観察してそ の中にあるパターンを⾒つけることを基礎に置いてい る。” ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利
⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
© - BASE, Inc. 参考: アレグザンダーの建築理論とソフトウェア設計の関係性 https://speakerdeck.com/hgsgtk/where-did-the-swing-metaphor-come-from
© - BASE, Inc. デザインパターンまとめ • Gang of Four •
パターンに名前がつけられ、同じテンプレートで表 現される • 「パタン‧ランゲージ」のアイデアに影響を受け “似て”いる
© - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次
© - BASE, Inc. 1977年『パタン‧ランゲージ―環境設計の⼿引』 https://www.amazon.co.jp/dp/
1936年ウィーン出⾝の都市 計画家‧建築家 建築‧都市計画の理論とし て、「パタン‧ランゲージ」 を提唱 © - BASE, Inc. クリストファー‧アレグザンダー
https://en.wikipedia.org/wiki/Christopher_Alexander
© - BASE, Inc. 建築において繰り返し現れる構造を再利⽤しやすい形 式にまとめたもの 利⽤者と設計者の共通⾔語(ランゲージ)として使う ことで、利⽤者が⾃分⾃⾝で建築の設計を⾏い、本当 に望んだ建築を実現できるようになることを⽬指した パタン‧ランゲージ
© - BASE, Inc. 『パタン‧ランゲージ』の3つの部 「町」:都市の⼤きな配置を考えるための⼤きなパ ターン 「建築」:敷地の空間にどのように建物を配置すべき かというパターン 「施⾏」:建物の構造‧材料、柱‧壁、床‧天井など
の⼀つ⼀つの構造を決めるためのパターン
© - BASE, Inc. 『パタン‧ランゲージ』パタン例 町: ⾃⽴地域‧町の分布‧フィンガー上の都市と⽥園 ..etc 建築: 複号建物‧⾒えない駐⾞場‧窓のある場所
..etc 施⼯: ⽣活空間にしたがう構造‧深い窓枠 ..etc
© - BASE, Inc. パタンの相互関係 • パタンには序列がある • 町→建築→施⼯は直列的なつながりで機能する •
各パタンは、ランゲージの上位にある特定のパタ ン、下位にある特定のパタンと結びつく C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』あるパタン‧ランゲージ
© - BASE, Inc. パタン名 上位パタンへのつながり 下位パタンへのつながり 写真 本⽂ パタン‧ランゲージのテンプレート
例: パタン 180 WIDOW PLACE パタン名: 「窓のある場所」 上位パタンへのつながり: 「⽞関 室」‧「禅窓」‧「どの
部屋も2⾯採光」 ..etc 下位パタンへのつながり: 「アルコー ブ」‧「低い窓台」 ..etc © - BASE, Inc. C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』あるパタン‧ランゲージ https://www.pinterest.jp/pin/
© - BASE, Inc. パタン‧ランゲージまとめ • 繰り返し現れる構造を再利⽤しやすい形式にまとめ た • パタンのテンプレート(形式)を定義している
• 町‧建築‧施⼯の⼤きく3つの分類 • パタンごとに相互関係を持ち、パタンを関係の順に 適⽤していくことで建築物を⽣成する
© - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次
© - BASE, Inc. パタン‧ランゲージとデザインパターンの相違点 .建築物には数千年の歴史があり、利⽤できる古典も多い。ソフトウェアシステ ムの場合は歴史がずっと短く、古典と呼べるものはほとんどない。 .Alexanderはパターンを利⽤する優先順位を付けたが、我々は順位を付けてい ない。 .Alexanderのパターンは扱う問題を強調しているが、我々のデザインパターン
は解決⽅法についてより詳細に記述している。 .Alexanderは提案したパターンによって完全な建築物が⽣成できると主張して いるが、我々は提案したパターンによって完全なプログラムが⽣成できるとは 主張していない。 ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利 ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
© - BASE, Inc. 相違点はどこから “建築とソフトウェアの根本的な性質の違いからくると⾔える でしょう。⼈が暮らす町、建物、部屋は、⼈が⼈の姿と機能 を持っている限り、たとえば⾝⻑や体重が⼀定の範囲に収ま るといった暗黙の条件を備えています。しかしソフトウェア は、物としての実体を持っていないがゆえに、その前提条件を
暗黙の内に規定することはできません。” 江渡 浩⼀郎. パターン、Wiki、XP 時を超えた創造の原則 (WEB+DB PRESS plus) 9章 デザインパターン
© - BASE, Inc. デザインパターンだけでソフトウェア設計ができるわけではない “本書に⽰したパターンはパターン⾔語を構成しては いない。構築されたソフトウェアシステムの多様性を 考えると、ステップバイステップにアプリケーション 設計指針を与えるような 完璧な
パターン集合を提供 することは困難である” ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利 ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
© - BASE, Inc. “デザインパターンは、ソフトウェア のための広範なパターン⾔語の⼀部に 過ぎない” ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利 ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
© - BASE, Inc. パタン‧ランゲージとの対応 「町」 ≈ アーキテクチャ ex. Layers,
MVC etc 「建築」 ≈ GoFのデザインパターン 「施⾏」 ≈ 各⾔語での実装パターン ex. Smalltalkベストプラクティスパターン 書籍 江渡 浩⼀郎. パターン、Wiki、XP 時を超えた創造の原則
© - BASE, Inc. “つまり⾔語には2つの機能がある。⼈間の過去の体験 を蓄積する機能。もう1つは、その蓄積された体験 (単語)を再利⽤(⽂法)して、無数の新しい概念 (⽂章)を作り出すという機能である。” C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』訳者あとがき
© - BASE, Inc. このトークでやったこと • デザインパターンと、その出⾃ともいえるパタン‧ ランゲージを抑えた • デザインパターンという概念の輪郭を、類似するも
のと⽐較して捉え直した • デザインパターンという “⾔語” を基本に次の概念 が⽣まれているとも⾔える
© - BASE, Inc. まとめ(パターン作成者視点) • 名前をつけて⾔語とすることによる、経験の蓄積と 次の概念への発展の期待 • パターンを同じテンプレートで記述することによる
わかりやすさ
© - BASE, Inc. まとめ(パターン利⽤者視点) • デザインパターンは完全なソフトウェアを作るもの ではないことは、発案者⾃⾝が⾔っていることに留 意 •
全てを解決できるわけではないが、これをひとつの “⾔語” として現状使えている。設計の “⾔語” とし て活⽤できる便利さがパターンにはある
© - BASE, Inc. <?php . . - @hgsgtk