私は、次の責任を持って、go で単純なコネクタ コンポーネントを構築しています。
- 外部サービスへの接続を開き、保持し、管理します (つまり、バックグラウンドで実行します)。
- 受信データを論理メッセージに解析し、これらのメッセージをビジネス ロジック コンポーネントに渡します。
- ビジネス ロジックから外部サービスに論理メッセージを送信します。
go のコネクタのインターフェイスをどのように設計するか決めかねています。
バリアント A) 受信メッセージのチャネル、送信メッセージの関数呼び出し
// Listen for inbound messages.
// Inbound messages are delivered to the provided channel.
func Listen(msg chan *Message) {...}
// Deliver msg to service
func Send(msg *Message) {...}
バリアント B) 受信メッセージと送信メッセージのチャネル
// Listen for inbound messages + send outbound messages.
// Inbound messages are delivered to the provided msgIn channel.
// To send a message, put a message into the msgOut channel.
func ListenAndSend(msgIn chan *Message, msgOut chan *Message) {...}
バリアント B は、私にはよりクリーンで「よく似ている」ように見えますが、次の回答を探しています。
- goでこれを行う「慣用的な」方法はありますか?
- あるいは、どの場合にバリアント A または B を優先する必要がありますか?
- この種の問題の他の注目すべき変種はありますか?