Дизайн класса Ruby - нужно ли создавать константы в отдельном файле? - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в Ruby, использую Bunny для приема сообщений от RabbitMQ.

Так что мой класс в настоящее время выглядит примерно так:

class Consumer

  include Validator

  def initialize
    #Start a RabbitMQ session
    @rdSession = Session.new

    @queueMain = rdSession.joinQueue('QueueMain')
    @queueLittle = rdSession.joinQueue('QueueLittle')
    ...
    @queueTen = rdSession.joinQueue('QueueTen')

    goWork
  end

  def goWork
     @queueMain.subscribe(:manual_ack => true) do |delivery_info, properties, payload|
        goDoSomethingElse(payload)
      end
     ....
     @queueTen.subscribe(:manual_ack => true) do |delivery_info, properties, payload|
        goDoAnotherPiece(payload)
      end
  end

Мой вопрос: файл становится довольнодолго, поэтому я хочу как-то уменьшить его.Итак, я подумал об одном: те, кто перемещает длинный список соединяющихся очередей в initialize в другой файл, поскольку они являются постоянными.

Однако каков правильный способ сделать это, если я создам модуль,скопируйте все эти joinQueue строк, а затем укажите в goWork такие константы, как: QUEUEMAIN?

Будут признательны за любые идеи / предложения.

Попытка понять хороший дизайнза это?

Спасибо.

1 Ответ

0 голосов
/ 29 октября 2018

Есть еще кое-что, что вы можете реорганизовать здесь, но в основном да, вы перемещаете лифтинг в модуль, и благодаря @Amadan вы можете

module GoWork
  def goWork
    @queues[:QueMain].subscribe(:manual_ack => true) do |delivery_info, properties, payload|
      goDoSomethingElse(payload)
    end
    @queues[:QueTen].subscribe(:manual_ack => true) do |delivery_info, properties, payload|
      goDoAnotherPiece(payload)
    end
  end
end

class Consumer

  include Validator
  include GoWork

  QUEUE_NAMES = %w(QueueMain QueueLittle QueueTen) 

  def initialize
    #Start a RabbitMQ session
    @rdSession = Session.new
    @queues = QUEUE_NAMES.map { |name| [name.to_sym, rdSession.joinQueue(name)] }.to_h

    goWork
  end
end

Также см. Руководство по стилю ruby ​​ рекомендуетсяпользователю snake_case для всех имен методов и переменных и использовать CamelCase для определений классов и модулей, но я этого не делал, так как это был не ваш вопрос.Также рекомендуется использовать Rubocop , чтобы помнить о правильном стиле.

...