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
Application Design 勉強会 #4
Search
Kazuki Chigita
July 17, 2019
Technology
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Application Design 勉強会 #4
Application Design 勉強会 #4
Kazuki Chigita
July 17, 2019
More Decks by Kazuki Chigita
See All by Kazuki Chigita
あの日のHotReloadはなぜ動かなかったのか? 〜OSセキュリティ(W^X)とJITコンパイラの攻防〜
chigichan24
3
1.3k
「 動く」サンプルでスムーズなコミュニケーションを
chigichan24
1
1.3k
Claude CodeでサクサクTestコードを移行しよう
chigichan24
2
1.5k
Live Update notificationのつかいどころ
chigichan24
0
360
不具合調査とTest
chigichan24
1
460
Flutterと難読化
chigichan24
0
5.7k
Building Android and looking into the Android System
chigichan24
2
4.2k
DroidKaigiカンファレンスアプリの歴史からみるアプリアーキテクチャのこれまでとこれから
chigichan24
2
3.5k
継続的に機能開発を進めながら行うマルチモジュール化
chigichan24
2
6.3k
Other Decks in Technology
See All in Technology
歴史から理解するクラウドインフラのしくみ
kizawa2020
0
190
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
480
VPCセキュリティ対応の最新事情
nagisa53
1
340
オートマトンと字句解析でRoslynを読む
tomokusaba
0
120
人依存からAIネイティブの体制へ:バックエンド開発の裏側【SORACOM Discovery 2026】
soracom
PRO
0
120
QA・ソフトウェアテスト研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
3
1.6k
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
190
「待ち時間」の消滅と「自我消耗」の加速:生成AI時代のエンジニアを救うメンタル・リソース管理
poropinai1966
0
300
BigQuery を検索ソースとした AI Agent の作り方って 〇〇 通りあんねん
satohjohn
0
140
GMOフィナンシャルゲートが挑む、「止まらない」決済インフラ構築の裏側【SORACOM Discovery 2026】
soracom
PRO
0
110
数値で見る Microsoft MVP 〜Spec Kit と GitHub Copilot Agent で作るデータ可視化ダッシュボード〜
yutakaosada
0
160
現場で使える AWS DevOps Agent 活用ノウハウ - Release Management 機能の検証結果を添えて / AWS DevOps Agent Release Management and Know-How
kinunori
4
700
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
470
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.8k
Writing Fast Ruby
sferik
630
63k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Believing is Seeing
oripsolob
1
170
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Six Lessons from altMBA
skipperchong
29
4.4k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
510
Making the Leap to Tech Lead
cromwellryan
135
10k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Transcript
Application Design勉強会 13-15章 Wed Jul 17 Kazuki Chigita
はじめに • 第3部の意義 • デザインパターンを学ぶ.
今⽇話すこと • Commandパターン • ActiveObjectパターン • TemplateMethodパターン • Strategyパターン •
Facadeパターン • Mediatorパターン
今⽇話すこと • Commandパターン • ActiveObjectパターン • TemplateMethodパターン • Strategyパターン •
Facadeパターン • Mediatorパターン
Commandパターン • 以下のようなinterfaceを用意する. • 利用するときはCommandを実装する. • 何がうれしいの? • この構造にすれば,Commandの実装クラスの詳細を 知らずとも利用できる.
• do()をすれば全てのコマンドが操作できる.
Commandパターン • 以下のようなinterfaceを用意する. • 利用するときはCommandを実装する. • 何がうれしいの? • この構造にすれば,Commandの実装クラスの詳細を 知らずとも利用できる.
• do()をすれば全てのコマンドが操作できる. シンプルなCommandパターンでは メソッドは⼀つ
Commandパターン • 以下のようなinterfaceを用意する. • 利用するときはCommandを実装する. • 何がうれしいの? • この構造にすれば,Commandの実装クラスの詳細を 知らずとも利用できる.
• do()をすれば全てのコマンドが操作できる. シンプルなCommandパターンでは メソッドは⼀つ それぞれでdo()をoverrideする.
Commandパターン(例1) • Transactionでの利用 • 使う側は同様にTransactionを実装(override) • メリット1 : ビジネスロジックとチェック機構の分離 •
メリット2 : 一時保存 / 時間差実行の実現
Commandパターン(例1) • メリット1 : ビジネスロジックとチェック機構の分離 • validate() はGUI等からも使われる有効性の チェックが具体的な登録処理を含むのは危ない. •
validate()はデータベースの詳細を知ることがな いので,ここでも分離ができている. • メリット2 : 一時保存 / 時間差実行の実現 • validate()の後,すぐにexecute()を呼び出す 必要はない. • execute()だけバッチ処理的に時間差で実行しても なんの問題もない. • 分離することで,一時的に状態を保持しておく構造 ができている.
Commandパターン(例2) • Undo機構の実現 • Commnadの実装先でdo()の処理内容を記憶す る必要がある. • undo()はdo()に依存しているので抱き合わせ て実装を考える必要がある.
Commandパターンまとめ • 普通はクラスに多くのpublic methodをもたせ るがそうではなくごく少数に抑えることで, 見通しを良くする. • interfaceの中に複数のメソッドを入れても,そ の存在意味を分離させたり(Transactionの例), 抱き合わせたり(Undoの例)できる.
今⽇話すこと • Commandパターン • ActiveObjectパターン • TemplateMethodパターン • Strategyパターン •
Facadeパターン • Mediatorパターン
ActiveObjectパターン • Commandパターンの利用例 • イベント駆動型やマルチスレッドを実現するた めのパターン ActiveObjectEngine : Commandのリストを持ち, これらの実⾏を管理する
Command : Interface.Commandパターン. SleepCommand: Commandの実装クラス
ActiveObjectパターン
ActiveObjectパターン ActiveObjectEngine itsCommands SleepComand HogeComand (wakeupCommandとして持っていると仮定)
ActiveObjectパターン ActiveObjectEngine itsCommands SleepComand HogeComand (wakeupCommandとして持っていると仮定)
ActiveObjectパターン ActiveObjectEngine itsCommands SleepComand SleepTimeの間これを繰り返す. HogeComand (wakeupCommandとして持っていると仮定)
ActiveObjectパターン ActiveObjectEngine itsCommands SleepComand SleepTimeの間これを繰り返す. HogeComand (wakeupCommandとして持っていると仮定) SleepTimeが終わったらこっちが登録される.
ActiveObjectパターン ActiveObjectEngine itsCommands SleepComand SleepTimeの間これを繰り返す. HogeComand (wakeupCommandとして持っていると仮定) SleepTimeが終わったらこっちが登録される.
ActiveObjectパターン
ActiveObjectパターンまとめ • 本来はブロッキング処理等で処理を止めて, itsCommandsを複数のスレッドにわたしてあ げると簡易的なマルチスレッド処理に実現がで きる. • イベント駆動型の真髄はこういうパターンだ. • Commandパターンをうまく活用している例.
今⽇話すこと • Commandパターン • ActiveObjectパターン • TemplateMethodパターン • Strategyパターン •
Facadeパターン • Mediatorパターン
TemplateMethodパターン • 課題 : 似た処理がアチラコチラに出てくる. パターン化した処理がコピペで煩雑に使われて いる. • 解決法 •
共通化や概念化できる大きな枠としての処理を abstract class(抽象基本クラス)に持っていく. • 上の概念化されたクラスを継承先で具体的なクラス 実装を行う. • 例 : Bubble Sortをどう扱うか
TemplateMethodパターン • BubbleSorter という abstractクラスを作成し, ここに大枠の実装の処理を委ねる. • これを継承するクラスで詳細を実装することで 共通化を図る. BubbbleSorter
{abbstract} IntBubbbleSorter DoubleBubbble Sorter
None
TemplateMethodパターン • 問題点 • BubbleSorterという名前にしてることからも分かる 通り,swap(index: Int)や, outOfOrder(index: Int)は,他のアルゴリズム で利用できない.
• BubbleSortのための再利用性はあるが, 他アルゴリズムのために使うことができない.
今⽇話すこと • Commandパターン • ActiveObjectパターン • TemplateMethodパターン • Strategyパターン •
Facadeパターン • Mediatorパターン
Strategyパターン • 課題 : 似た処理がアチラコチラに出てくる. パターン化した処理がコピペで煩雑に使われて いる.(TemplateMethodパターンと同じ) • 解決法 •
汎用的な部分や概念的な部分を抽象クラスで実装せ ずに,Handleクラスのようなものに持っていく • 実装すべきものはinterfaceに切り出す • 例 : Bubble Sortをどう扱うか
None
None
Strategyパターン • 良い点 • TemplateMethodパターンの課題を解決している. • SortHandleを他のソートパターンでも利用できる • interfaceで切り出しているので, DIPと相性がいい.
• BubbleSortのみにとどまらない再利用性が高い. • 問題点 • 実装が少し多くなる • (こういうパターンはStrategyパターンで解決 するのが現状良さそう)
今⽇話すこと • Commandパターン • ActiveObjectパターン • TemplateMethodパターン • Strategyパターン •
Facadeパターン • Mediatorパターン
Facade & Mediator パターン • 課題 : クラス間の結合度を下げたい. • 解決方法
• Façade • 上から抑える(wrapする) • Mediator • 下から抑える(Mediatorにやってもらう)
Facade & Mediator パターン • 課題 : クラス間の結合度を下げたい. • 解決方法
• Façade • 上から抑える(wrapする) • Mediator • 下から抑える(Mediatorにやってもらう)
Facadeの場合 P224 図15-1より
Facadeの場合 P224 図15-1より 集約点を作る
Mediatorの場合
Mediatorの場合
使い分け • FacadeとMediatorの使い分け • 明示的に方針を示したいとき.集約点を作りたいと き→Façade • 非明示的に方針を課したいとき→Mediator