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.5k
HTTP Server on random available port in Go
hgsgtk
0
940
Agile Testingを夢見たテスト自動化 〜ATDDへの挑戦から始まる 1年間の試行錯誤〜 / dreaming agile testing at basebank
hgsgtk
14
7.7k
Create Go WebDriver client from scratch
hgsgtk
1
2.2k
PHPでWeb Driver Clientを自作する〜己の手でブラウザ操作自動化を完全理解する方法〜 / phpcon2021
hgsgtk
2
2.5k
振り返りを積み上げて自分たちのプラクティスとして昇華•体得していくための仕組みと考え方 / ScrumFestMikawa2021
hgsgtk
3
2.4k
Other Decks in Technology
See All in Technology
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
590
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
200
大幅アップデートされたRagas v0.2をキャッチアップ
os1ma
2
540
20241220_S3 tablesの使い方を検証してみた
handy
4
600
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
180
Opcodeを読んでいたら何故かphp-srcを読んでいた話
murashotaro
0
270
LINEヤフーのフロントエンド組織・体制の紹介【24年12月】
lycorp_recruit_jp
0
530
podman_update_2024-12
orimanabu
1
280
なぜCodeceptJSを選んだか
goataka
0
160
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
160
kargoの魅力について伝える
magisystem0408
0
210
多領域インシデントマネジメントへの挑戦:ハードウェアとソフトウェアの融合が生む課題/Challenge to multidisciplinary incident management: Issues created by the fusion of hardware and software
bitkey
PRO
2
110
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
YesSQL, Process and Tooling at Scale
rocio
169
14k
Writing Fast Ruby
sferik
628
61k
Building an army of robots
kneath
302
44k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
KATA
mclloyd
29
14k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
Why Our Code Smells
bkeepers
PRO
335
57k
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