[Go言語]Facadeパターンを学ぼう!

こんにちは、KOUKIです。

この記事では、デザインパターンの一つであるFacade(ファサード)パターンについて紹介します。

デザインパターンまとめ

シチュエーション

Facadeパターンは、複数のクラス(Go言語にはクラスがないので構造体)が絡むような複雑な処理を吸収する窓口を作ります。

身近な例としてログイン処理を考えてみましょう。

Tokenを取得する処理とログインする処理を書きました(中身は実装してませんが)。

このソースコードは、ユーザー側で以下の様に利用します。

ご覧の通り、「ログインをする」という目的のために利用者側で色々な処理の呼び出しが必要です。このような場合は、単一のインターフェースを用意すると処理がシンプルになります。

Facadeパターンを適用する

Facadeパターンで実装してみましょう。
本記事の目的はFacadeパターンを紹介することなので、サンプルコードは簡略的に書いてます

構造体を包む

Facadeパターンでやりたいことは複数の構造体からなる処理の呼び出しに単一のインターフェースを提供して一元管理することです。

そのため、構造体を包む構造体を定義します。

コンストラクタの定義

次に、コンストラクタを定義します。

ここでは、TokenとUserをインスタンス化しています。

共通のインターフェースを作る

次に、複数の処理をひとまとめにするメソッドを定義します。

使ってみよう

このコードは、以下の様に呼び出すことができます。

共通のインターフェースが提供されたので、呼び出し処理がスッキリしたと思います。

まとめ

今回は、ログイン処理を例にあげましたが、実際のログインの処理はこんな簡単ではないですねw

強調したかったことは、以下のことです。

機能呼び出し → 複数の処理をAppでゴニョゴニョ → 期待した結果を取得

この「複数の処理をAppでゴニョゴニョ」の考え方は、マイクロサービスなんかで使えるんじゃないかなと思いました。

マイクロサービスは、独立したAppを連携させて管理/運用する手法ですが、細分化するが故に、呼び出しが辛くなっていくと思うんですよね。

それを共通のインターフェースを作って、App側でよろしくやってくれるように実装すれば、利用者側も使いやすいコードになると思います。

ガンガン実装していきたいですね。

それでは、また!

Go言語まとめ

ソースコード

コメントを残す