Я хотел бы знать, является ли наилучшей практикой дизайна много взаимодействия с базами данных в Sidekiq.Ответственный секретарь Sidekiq
У меня есть объект службы, который доставляет SMS-сообщения до User
. Он просто извлекает id
пользователей и звонит .perform_async
на рабочий класс Sidekiq.
В SMS содержится много информации о других моделях. Поэтому у работника есть длинный метод #perform
, который просто устанавливает ряд промежуточных переменных.
Например, он запрашивает таблицы, такие как jobs
, bids
, business
и вызывает ассоциации объектов ActiveRecord.
Должно ли это быть обязанностью службы по возврату всех данных и просто передать этим работникам id
? Или я могу просто передать в id
с user
и позволить работнику беспокоиться о базе данных и ассоциациях?
Я думаю поставить код, который загружает данные работника будет более эффективным, так как это позволит сократить время отклика, потому что они сделаны в фоновом режиме, и вы могли бы также создать специальный класс запроса или что-то для тех, если вы хотите инкапсулировать его, а затем использовать этот класс в коде работника. Кроме того, не рекомендуется передавать объекты в качестве параметров для рабочего, поэтому вам нужно будет скрыть идентификаторы всех этих объектов и вернуть их в любом случае – JustMichael