PHPカンファレンス沖縄 2019 前夜祭 で発表したデザインパターンの出自から特性を理解しようという内容です
© - BASE, Inc.デザインパターンを出⾃から深く理解するPHPカンファレンス沖縄 2019 前夜祭. . - @hgsgtk
View Slide
© - BASE, Inc.持ち帰っていただくこと• 「デザインパターン」を普段の視点ではあまり考えない、その出⾃を視点に⾒る• 影響の⼤きい「パタン‧ランゲージ」を抑えた上で、「デザインパターン」を⾒てみる
© - BASE, Inc.var_dump($hgsgtk);: @hgsgtkKazuki HigashiguchiBASE BANK, Inc. / Dev Division / Tech LeadSoftware Developer
© - BASE, Inc.デザインパターンパタン‧ランゲージパタン‧ランゲージとデザインパターン⽬次
© - BASE, Inc.デザインパターンとは• オブジェクト指向ソフトウェアを設計する際の経験を記録、カタログ化したもの• ソフトウェア設計において繰り返し現れる構造をパターンとしてまとめる• “種々の状況における設計上の⼀般的な問題の解法に適⽤できるよう、オブジェクトやクラス間の通信を記述したもの”
© - BASE, Inc.1994年 GoF (Gang of Four)1992年 OOPSLAで、Erich Gamma、RichardHelm、Ralph E. Johnson、John MatthewVlissides の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 FactoryFactory MethodSingletonBuilderPrototype⽣成に関するパターン
© - BASE, Inc.AdapterCompositeFacadeBridgeDecoratorFlyweightProxy構造に関するパターン
© - BASE, Inc.Chain of ResponsibilityInterpreterMediatorCommandIteratorMemento振る舞いに関するパターン
© - BASE, Inc.デザインパターンのテンプレート(GoF Form)⼤枠• パターン名: 設計における⽤語の語彙を増やすため• 問題: 問題と⽂脈• 解法: 設計の要素、解法および責任、協調関係• 結果: 適⽤した結果やトレードオフ
© - BASE, Inc.パターン名と分類別名適⽤可能性⽬的動機構造協調関係実装構成要素結果デザインパターンのテンプレート(GoF Form)詳細
© - BASE, Inc.サンプルコード関連するパターン使⽤例デザインパターンのテンプレート(GoF Form)
© - BASE, Inc.例: Composite patternhttps://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.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.パタン‧ランゲージとデザインパターンの相違点.建築物には数千年の歴史があり、利⽤できる古典も多い。ソフトウェアシステムの場合は歴史がずっと短く、古典と呼べるものはほとんどない。.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.. . - @hgsgtk