У меня вопрос из двух частей
Лучшая практика
- У меня есть алгоритм, который выполняет некоторую операцию над структурой данных с помощью общедоступного интерфейса.
- В настоящее время это модуль с множеством статических методов, все частные, за исключением одного метода открытого интерфейса.
- Есть одна переменная экземпляра, которая должна использоваться всеми методами.
Вот варианты, которые я вижу, и какой из них лучший ?:
- Модуль со статическими ('модуль' в ruby) методами
- Класс со статическими методами
- Модуль Mixin для включения в структуру данных
- Выполните рефакторинг той части алгоритма, которая изменяет эту структуру данных (очень маленькую), и сделайте ее миксином, который вызывает статические методы модуля алгоритма.
Техническая часть
Есть ли способ сделать частный метод модуля ?
module Thing
def self.pub; puts "Public method"; end
private
def self.priv; puts "Private method"; end
end
private
Там , кажется, не имеют никакого эффекта , я все еще могу назвать Thing.priv
без проблем.
private
влияет только на методы экземпляра, но не на методы класса. используйте private_class_method
вместо этого:module Thing; def self.pub; end; private_class_method :pub; end