Как делить методы между рабочими рельсов сидекик - PullRequest
1 голос
/ 10 ноября 2019

У меня есть два рабочих sidekiq в приложении rails, и мне интересно, каким будет лучший способ поделиться кодом между ними.

class PriceReminderWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'price_alerts'

  def method_to_share
    stuff
  end 
end

и

class PriceNotificationWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'price_alerts'

  def method_to_share
    stuff
  end 
end

'rails / ruby ​​way' наследовать от родительского класса или добавить новый модуль, возможно?

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Я бы использовал наследование, если для вас, например, имеет смысл, что PriceReminderWorker и PriceNotificationWorker являются PriceWorker, а методы, которыми вы хотите поделиться, имеют смысл в контексте PriceWorker. Например, в Rails имеет смысл, что все модели являются ApplicationRecord

. Я бы включил методы в модуль, если методы, которыми вы хотите поделиться, просто используют некоторые общие «черты», которые разделяют оба класса. ,Например, в Ruby и класс Array, и класс Hash имеют «черту», ​​они оба реализуют метод foreach, который может принимать блок и вызывать этот блок для каждого члена своей коллекции. В этом случае оба класса включают модуль Enumerable.

0 голосов
/ 10 ноября 2019

Вы можете поместить ваши общие методы в модуль и просто включить их в рабочие классы.

module Workify
  def method_to_share
    puts "hooray we're DRY!"
  end
end

class PriceReminderWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'price_alerts'
end

class PriceNotificationWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'price_alerts'
end

Оба рабочих класса теперь имеют доступ к методу, определенному в модуле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...