かまずにまるのみ。

文鳥とかビールとか

デザインパターン - Facade

オブジェクト指向のこころ のつづき。
GoFデザインパターンにある Facade パターンについて。


Facade?

Facade(ふぁさーど)を辞書で調べると以下のように書かれている。

1. (建物の)正面.
2. (しばしば実体よりりっぱな事物の)見かけ,外見.

http://ejje.weblio.jp/content/facade

 

ざっくり

既存システムを簡単に利用するための窓口を提供する。
窓口はシンプルな独自のインタフェースとなる。
デザインパターンを知らない人でもたぶん普通に使っているはず。

f:id:tdakak:20130619203424p:plain:w350


イメージ

窓口の存在

何でも預かる窓口があったとする。
ユーザ(お客さん)は窓口の人と以下のようなやりとりができる。

  • 何かを預ける
  • 預けたものを返してもらう

f:id:tdakak:20130619131026p:plain:w300

何かを預けたいときは窓口の人に渡せばよい。
預けたものを返してほしいときも、窓口の人にその旨伝えるだけ。
f:id:tdakak:20130619131033p:plain:w300

窓口の裏側

何でも預かる窓口の裏は結構複雑で、たくさんの倉庫や配送の仕組みがある。
しかしそれらは窓口に隠されていてユーザからは見えない。
窓口がユーザに提供するのは「何かを預かる」「預かったものを返す」だけ。
ユーザは窓口の後ろがどのようになっているか知る必要はない。
f:id:tdakak:20130619185149p:plain:w300

窓口の存在によって何が起こるのか

  • ユーザはシンプルな方法で荷物を預けることができるようになる
  • 「何かを預けるときは窓口を通す」という方針(制約)の規定
  • 窓口の裏側の仕組み(たとえば配送業者とか)が変わった場合、ユーザへの影響を最小限に抑えることが期待できる
  • ユーザは窓口が提供するサービス以外利用できない
    • もしかしたらたまに配送を使いたいときがあるかもしれない
    • その場合はまた別の方針が必要になるかもね

 

まとめ

  • 既存システム内のよく使う処理を簡潔なインタフェースで提供するのが Facade
  • Facade クラスは既存システムを利用するための方針(制約)を明示する
  • Facade クラスにより既存システムの使用方法が簡素化される
  • Facade クラスによって使用できる機能が制限される
  • Facade は既存クラスの隠蔽(カプセル化)のために使用することもできる

 

オブジェクト指向のこころ

オブジェクト指向についてもう少し理解を深めたいと思い「オブジェクト指向のこころ」という本を読み始めた。
BEAR.Sunday や SymfonyRuby に触れているうちに、オブジェクト指向の本質的なところを理解していないと感じたことがきっかけ。

  • 本を読み始めた時点の自分
    • オブジェクト指向の概要は一応知ってる(つもり)
    • それっぽいコードは書ける(と自分では思ってる)

f:id:tdakak:20130604160434p:plain:w200
Amazon.co.jp: デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series): アラン・シャロウェイ, ジェームズ・R・トロット, 村上 雅章: 本

まだ途中までしか読んでいないのだけどとてもおもしろい。
自分の認識が曖昧だったところを中心にまとめておく。

続きを読む

RubyHirobaでLTしてきました

RubyHiroba で初めての LT を行ってきました。

勢いで LT に申し込んでしまったものの、発表直前までは「やっぱりやめておけばよかった…」と思ったりもしました。そのおもな理由は以下。

  • 人前で話すどころか人前に出るのもものすごく苦手
  • 社内勉強会ですらまともに話せないくらい発表苦手
  • エンジニアとして技術力不足な自分が話せることなんてあるのか


でもそもそも LT に申し込んだのは「むしろ技術力不足で、話すの苦手で、成長の鈍い残念なプログラマの自分だからこそ話せることもあるんじゃないかな」という思いからでした。

結果としては、やってよかったです。
残念なプログラマだって LT できるんだよ!という記録が残せました。
ばりばりの Rubyist さんたちの前でお話させていただくのは非常に緊張しましたが、皆さんがあたたかく見守ってくださったおかげで何とか発表を終えることができました。


Rubyをはじめたときにつまづいたこと // Speaker Deck

Ruby * Scratch * CoderDojo // Speaker Deck


あと、なぜか2回話してしまったことについて。

  1. 午後の初心者枠に "Ruby を始めてつまずいたこと" で申し込み
  2. @jishiha さん「Ruby + Scratch とCoderDojo のネタで誰か発表しない?」
  3. 自分「やりたいやりたい」「でも初心者枠申し込み済み…」
  4. スタッフさんから「2枠やってもいいよ」
  5. 午前の無差別枠に "Ruby * Scratch * CoderDojo" で申し込み

…という流れだったので、初心者枠での発表は実質2回目の LT となってしまい、純粋な初心者ではない感じになってしまいました。すみません。
どちらも緊張しすぎててほぼ「ハシビロコウ」を連呼してた記憶しかない。

今回参加と発表の機会をいただけたこと、改めてお礼を言いたいです。
ありがとうございました。