Держите соединение со сторонней службой открытым между запросами - PullRequest
1 голос
/ 22 мая 2019

У меня есть этот модуль, который работает как адаптер для сторонней службы:

module Salesforce
  class ConnectionService
    class << self
      def client
        @client ||= Restforce.new(
          # Connection Params
        )
      end 

      delegate :query, :create!, :update!, :upsert!, to: :client
    end
  end
end

Идея состоит в том, чтобы назвать его как:

Salesforce::ConnectionService.query('select things from remote service')

Моя цель заключается в том, потому чтоустановление соединения занимает некоторое время, я хотел бы иметь возможность запоминать его для повторного использования в запросах.

Проблема в том, что наличие переменных экземпляра в методах класса не является потокобезопасным.Поэтому я хотел бы знать, каким будет правильный способ сделать это.

Примечание: я знаю, что пока я не учитываю случай, когда соединение закрывается, я буду иметь дело с этим позже.

1 Ответ

1 голос
/ 22 мая 2019

Вы хотите выполнить рефакторинг, используя один из множества шаблонов конфигурации, которые запоминают экземпляр.Но вы можете быстро и грязно обойти:в инициализаторе, а затем вызвать его оттуда.

...