В 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 -произведенных, вам захочется прочитать объектно-ориентированных шаблонов проектирования , чтобы узнать, как правильно структурировать вещи.