この質問に対する答えは、ユースケースとアプローチによって異なります。ただし、私の一般的な推奨事項は、Coinbase API とのすべての通信を処理するサービス オブジェクトを作成することです(DDD の意味で) 。そして、このサービス オブジェクト内で、Coinbase::Client オブジェクトを 1 回初期化するだけで、何回呼び出してもかまいません。次に例を示します。
# app/services/coinbase_service.rb
class CoinbaseService
cattr_reader :coinbase_client, instance_accessor: false do
Coinbase::Client.new(ENV['COINBASE_API_KEY'], ENV['COINBASE_API_SECRET'])
end
def self.do_something
coinbase_client.do_something_in_their_api
end
def self.do_something_else
coinbase_client.do_something_else_in_their_api
end
end
したがって、次のようにすることができます。
# From MyController#action_1
if CoinbaseService.do_something
# ...
else
# ...
end
または:
# From MyModel
def do_something
CoinbaseService.do_something_else
end
app/services
サービス オブジェクトを機能させるには、application.rb ファイルの autoload パスに追加する必要がある場合があります。私は通常、これを追加するだけです:
# config/application.rb
config.autoload_paths += %W(#{config.root}/app)
このサービス オブジェクト アプローチは、組織的に非常に有益であり、より効率的 (必要な新しい Coinbase クライアントの呼び出しは 1 回だけ) であり、テストが容易であり (への呼び出しを簡単にモックアウトできますCoinbase::Client
)、単純に楽しいものです :)。