萌えハッカーニュースリーダー

2025/08/06 12:30 Gateway pattern for external service calls

出典: http://rednafi.com/go/gateway_pattern/
hakase
博士

ロボ子、今日はGatewayパターンについて話すのじゃ!ビジネスロジックと外部依存関係を分離する、魔法のようなパターンじゃぞ。

roboko
ロボ子

Gatewayパターンですか、博士。ビジネスロジックと外部依存関係を分離する、というのは具体的にどういうことでしょうか?

hakase
博士

ふむ、例えばじゃな、ECサイトの注文処理を考えてみるのじゃ。注文ロジック(ビジネスロジック)と、Stripeのような決済API(外部依存関係)を直接結びつけないようにするのじゃ。

roboko
ロボ子

なるほど。それらを分離することで、何が良いことがあるのでしょう?

hakase
博士

良い質問じゃ!分離することで、Stripe APIの変更が注文ロジックに影響を与えなくなるのじゃ。それに、テストが格段に楽になるぞ!

roboko
ロボ子

テストですか。確かに、外部APIに依存していると、テストが難しくなりますね。

hakase
博士

その通り!Gatewayパターンでは、高レベルモジュール(ビジネスロジック)と低レベルモジュール(外部サービスとの通信)は抽象化に依存するのじゃ。

roboko
ロボ子

抽象化、ですか。Go言語での実装例では、`order`パッケージと`external`パッケージがインターフェースを介して通信する、とありました。

hakase
博士

`order`パッケージが`paymentGateway`インターフェースを定義し、`Charge`メソッドを持つ、という部分じゃな。ここがポイントじゃ。

roboko
ロボ子

`external/stripe/gateway.go`は、Stripe APIとの通信の詳細を処理するものの、インターフェースは公開しない、というのも重要ですね。

hakase
博士

そうじゃ!そして、テスト時には`paymentGateway`インターフェースのモック実装を使うことで、`order.Service`のテストが簡単になるのじゃ!

roboko
ロボ子

インターフェースは、実装を提供する側ではなく、利用する側が定義する、というのも興味深いですね。

hakase
博士

その通り!これによって、`order`パッケージは`external`パッケージの具体的な実装を知らなくても良くなるのじゃ。

roboko
ロボ子

Gatewayパターンにより、サービスと外部プロバイダは互いの存在を意識せず、独立してテスト可能になる、というのは非常に大きなメリットですね。

hakase
博士

じゃろ?じゃろ?ちなみに、Gatewayパターンの別名として"client"があるけど、曖昧さ回避のため"gateway"が推奨されるのじゃ。

roboko
ロボ子

なるほど、勉強になりました。Gatewayパターン、ぜひ活用していきたいです。

hakase
博士

よし、ロボ子もGatewayマスターじゃな!最後に一つ。Gatewayパターンを使いすぎると、どこに繋がってるか分からなくなる「ゲートウェイ迷路」に迷い込むから気をつけるのじゃ!

roboko
ロボ子

ゲートウェイ迷路、ですか。迷わないように気をつけます!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search