datchの日記

気がついたら社会人。気になる技術的なことについて少しずつ書いていけたらと思っております。

【デザインパターン】ファサードパターン

どうも、昨日は私事の準備の為に大学を休んで色々と出回っていていました。
何事も催す側は大変なんだなぁ、と染み染み再確認。
そして、今日気づいたら昨日の気温差のせいか若干倦怠感ががが…
もっと体調管理しっかりせねば。

さて、今回は「Facadeパターン」について説明していくよ。
(非常に抽象的なデザインパターンであり、詳細な例を出しづらいパターンなので、先に断っておきますが非常に短くなります)

参考書



さらっと読める「OREILLY Head First デザインパターン」を参考にしながら書いています。
しばらくはこいつを参考にデザインパターンについて書いていくよ!

一覧



この記事は以下の様な流れで記述される。

  1. Facadeパターンって何ですか?
  2. Facadeパターンのメリット
  3. 具体的な例

Facadeパターンって何ですか?



自分の言葉で説明するとかなりあっさりしてしまいそうなのですが、
Facadeパターンは様々な依存関係を持つクラスにアクセスし易いインターフェースを用意するパターンです。
イメージとしてはMVCのControllerにあたる部分がFacadeパターンだと思って下さい。
ControllerはViewとModelという複雑に絡み合う機能を、URLルーティングを行う事で扱いやすくしています。
ControllerはFacadeパターンをより具体的にしたものだと考えると理解をしやすくなるでしょう。

Wikipediaさんも参照。

Facade(ファサード)とは「建物の正面」を意味する。異なるサブシステムを単純な操作だけを持ったFacadeクラスで結び、サブシステム間の独立性を高める事を目的とする。

Facadeパターンクラス図

処理が使用者から隠蔽されているという点でCommand,Adaptorパターンと似たものを感じますね。

Facadeパターンのメリット



Wikipediaさんにも書いてある通り、メリットはシステム全体の依存性*1を下げることができます。

具体的な例(なんてないんだよ!)



先ほども説明したとおり、MVCでいうControllerがFacadeの概念にもっとも近いです。
ControllerというURLルーティングで、対応する処理を実行すること。
それは、ある目的を持った一連の流れを実行させる、ということに近いです。
このブログを見ている人はMVCのコントローラに触れているので、わざわざ抽象度の高い例を載せるとかえって混乱するので載せません。

CommandやAdaptorパターンとの違いとしては目的による部分が大きいです。

Commandパターンでは、クライアントが実行する処理の詳細は隠蔽されており、秘匿性・機能性の高い関係を持たせることが目的です。

Adaptorパターンは、処理の対象を変換することを目的にしたパターンです。

そして、Facadeパターンは処理の抽象度を高めることが目的です。

ユーザがログインする、という一連の処理の流れを掘り下げれば、Validation、Database Access、パスワードのハッシュ化など様々な処理が複雑に絡み合って成り立っている処理を、”ログイン”というひとつの抽象的な手続きでまとめられています。

これがまさしくFacadeパターンの概念と一致するのです。

最後に



おそらく、Facadeパターンはある程度プログラミングの経験を詰んだものであれば、ほとんどの人が行っている詳細な処理の関数をある関数でまとめる、という作業に近いものです。
みんながさり気なくやっていた作業に、デザインパターンで名前がついていると知っていれば、何かあった時にドヤ顔で語ることが出来ていいかもしれないですね。
処理の簡略化、抽象化がFacadeパターン。
それを頭の隅に入れてもらえば十分です!

*1:結合度