The Facade Pattern

太一

2011/04/25

太一について

  • プログラマとか、アーキテクトとか、そういうの。
  • 最近はRiakのJavaクライアントをNetty使ってゴリゴリ書いてるマス。
    • https://github.com/taichi/org.handwerkszeug.riak
    • 太一の現状におけるガチコードを見てみたい人はcloneすると良いよ。
  • RiakはErlangで記述された極一部(主に太一とその1ホップ以内)でブーム
  • 僕、悪いモンスターじゃないよ?(http://twitter.com/ryushi)

ファサードパターンについて

  • 概要
  • 目的
  • その効果
  • 関連する他のパターン

概要 (1) 直線的なイメージ

概要 (2) イメージに関する説明

  • 建築におけるアナロジーでデカい建物の正門とかそういう部分の事
  • 大きかったり複雑だったりする「何か」を一くくりにする為の境界
  • 内部にあるより煩雑な「何か」を隠蔽して単純化したりするアレ

概要 (3) java-jaで例えると

  • : @yamashiro 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』やるぜ、ヲイ
  • : @yoshiori 了解
  • : 各位 partake.in 立てたのでエントリして下さい。
  • : 各位 名簿に名前書いて下さい
  • : 名簿をグリィィィに引渡しますた。
  • : ピザとビールの発注完了。
  • : 会場設営なう。

概要 (4) ファサードにおける一旦の結論

ymashiro先生はjava-jaにおける宴会ファサードである。

目的 (1) よりフォーマルな説明

ファサードは

  • ある程度の複雑性を持ったサブシステム群を一まとめにする事で簡単に使える様にする
  • 背後に一定以上の複雑さを持ったライブラリに抽象度の高い操作を定義する
  • ライブラリ内部における複雑な状態遷移や依存性をそのクライアントに対して隠蔽する
  • 手出しの難しいレガシーシステムや連携先システムの一本化された入り口とする

目的 (2) 箱的な何か。

その効果 (1) 良い効果

  • ファサードは3層やN層型等Layerアーキテクチャパターンと親和性が高い
    • 設計し易い
  • モックやスタブに差換える事が簡単になる。
    • テストし易い

その効果 (2) 概念モデル

その効果 (3) 悪い効果

  • 手続き志向なインターフェースになり易い
    • 呼出しの際に引き渡されるコンテキストの量が多くなりがち
    • 深すぎるレイヤーはオブジェクトコピーの回数が増えすぎる為にパフォーマンスが劣化する
  • ファサード自体が肥大化し過ぎたり、God Object等巨大なオブジェクトになり易い
    • 1ファイルで数千行にも及ぶ処理がうっかり記述されてしまったりする
    • 「分り易い」と「分った気になり易い」は隣り合わせ

関連する他のパターン (1)

まとめ

  • Facadeはソレを一本化するアレ
  • Facadeの責務を出来るだけ減らせると勝つる。
    しかしながら長期間に渡って責務を少なく保つのは難しい
  • ymsr先生の宴会力パネェ

ご清聴ありがとうございました。