デザインパターン - Facade
オブジェクト指向のこころ のつづき。
GoF のデザインパターンにある Facade パターンについて。
Facade?
Facade(ふぁさーど)を辞書で調べると以下のように書かれている。
1. (建物の)正面.
http://ejje.weblio.jp/content/facade
2. (しばしば実体よりりっぱな事物の)見かけ,外見.
イメージ
窓口の存在
何でも預かる窓口があったとする。
ユーザ(お客さん)は窓口の人と以下のようなやりとりができる。
- 何かを預ける
- 預けたものを返してもらう
何かを預けたいときは窓口の人に渡せばよい。
預けたものを返してほしいときも、窓口の人にその旨伝えるだけ。
窓口の裏側
何でも預かる窓口の裏は結構複雑で、たくさんの倉庫や配送の仕組みがある。
しかしそれらは窓口に隠されていてユーザからは見えない。
窓口がユーザに提供するのは「何かを預かる」「預かったものを返す」だけ。
ユーザは窓口の後ろがどのようになっているか知る必要はない。
窓口の存在によって何が起こるのか
- ユーザはシンプルな方法で荷物を預けることができるようになる
- 「何かを預けるときは窓口を通す」という方針(制約)の規定
- 窓口の裏側の仕組み(たとえば配送業者とか)が変わった場合、ユーザへの影響を最小限に抑えることが期待できる
- ユーザは窓口が提供するサービス以外利用できない
- もしかしたらたまに配送を使いたいときがあるかもしれない
- その場合はまた別の方針が必要になるかもね
まとめ
- 既存システム内のよく使う処理を簡潔なインタフェースで提供するのが Facade
- Facade クラスは既存システムを利用するための方針(制約)を明示する
- Facade クラスにより既存システムの使用方法が簡素化される
- Facade クラスによって使用できる機能が制限される
- Facade は既存クラスの隠蔽(カプセル化)のために使用することもできる
RubyHirobaでLTしてきました
RubyHiroba で初めての LT を行ってきました。
勢いで LT に申し込んでしまったものの、発表直前までは「やっぱりやめておけばよかった…」と思ったりもしました。そのおもな理由は以下。
- 人前で話すどころか人前に出るのもものすごく苦手
- 社内勉強会ですらまともに話せないくらい発表苦手
- エンジニアとして技術力不足な自分が話せることなんてあるのか
でもそもそも LT に申し込んだのは「むしろ技術力不足で、話すの苦手で、成長の鈍い残念なプログラマの自分だからこそ話せることもあるんじゃないかな」という思いからでした。
結果としては、やってよかったです。
残念なプログラマだって LT できるんだよ!という記録が残せました。
ばりばりの Rubyist さんたちの前でお話させていただくのは非常に緊張しましたが、皆さんがあたたかく見守ってくださったおかげで何とか発表を終えることができました。
Rubyをはじめたときにつまづいたこと // Speaker Deck
Ruby * Scratch * CoderDojo // Speaker Deck
あと、なぜか2回話してしまったことについて。
- 午後の初心者枠に "Ruby を始めてつまずいたこと" で申し込み
- @jishiha さん「Ruby + Scratch とCoderDojo のネタで誰か発表しない?」
- 自分「やりたいやりたい」「でも初心者枠申し込み済み…」
- スタッフさんから「2枠やってもいいよ」
- 午前の無差別枠に "Ruby * Scratch * CoderDojo" で申し込み
…という流れだったので、初心者枠での発表は実質2回目の LT となってしまい、純粋な初心者ではない感じになってしまいました。すみません。
どちらも緊張しすぎててほぼ「ハシビロコウ」を連呼してた記憶しかない。
今回参加と発表の機会をいただけたこと、改めてお礼を言いたいです。
ありがとうございました。