Что использовать: класс или модуль, в ROR - PullRequest
0 голосов
/ 09 мая 2018

Я новичок в ROR и пытаюсь преобразовать свое приложение PhP в приложение ROR. Существует один php-файл common.php, который включен почти во все остальные файлы. Аналогично common.php, в свою очередь, использует RPCClient.php и User.php. Переменные и методы являются общими для файлов php. Итак, что я должен использовать в ROR для класса или модуля, поскольку данные распределяются между различными файлами.

1 Ответ

0 голосов
/ 09 мая 2018

В Ruby вы захотите организовать вещи в пространства имен, и лучший способ сделать это - через объявления классов и модулей.

Как правило, class - это то, что вы создаете экземпляр , а module - это то, что либо "смешивается" (например, набор методов, импортируемых другими модулями или классами) или используется напрямую.

Например:

class User < ActiveRecord::Base
end

Здесь Users - это класс, потому что вы создаете пользователей, и каждый пользователь представлен объектом.

Вы также можете объявить методы как "mixins" или включаемые модули:

module UserPermissions
  def can_delete_post?(post)
    post.user_id == self.id
  end
end

class User < ActiveRecord::Base
  include UserPermissions
end

Где сейчас user.can_delete_post? - допустимый метод, и этот метод выполняется в контексте данного пользовательского экземпляра.

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

module AppConfig
  def self.account_limit
    1
  end
end

AppConfig.account_limit
# => 1

Где вы можете вызвать этот метод напрямую, без необходимости include. Это довольно распространенный шаблон, это просто пространство имен организации.

Как и во многих объектно-ориентированных языках, особенно в Smalltalk -произведенных, вам захочется прочитать объектно-ориентированных шаблонов проектирования , чтобы узнать, как правильно структурировать вещи.

...