В Rails наличие Gem, распространяющего все свои методы на контроллер приложения, является хорошей практикой?

Является ли обычной практикой расширение всех методов Gem в контроллер приложения в Rails?

Потому что кажется, что гем Facebooker этого не делает, и неизвестно, является ли этот метод гемом facebooker или нашим внутренним кодом.

Поэтому, когда нам нужно перейти на Facebooker2, трудно найти все методы, которые на самом деле являются методами драгоценного камня Facebooker, потому что имена методов не имеют соглашения об именах для grep.

Это обычная практика. Если вместо этого код всегда использует

fbker = Facebooker.new
fbker.do_something

or

Facebooker::clear_fb_cookies

это было бы намного проще найти связанный код. Но является ли общепринятой практикой, когда гем делает все свои методы частью контроллера приложения?


person nonopolarity    schedule 25.10.2010    source источник


Ответы (1)


Это не обычная практика, и это называется «обезьянье исправление».

Во-первых, вы не хотите, чтобы гем-обезьяна автоматически исправляла ваш код. Из-за этого очень сложно предсказать, как поведет себя ваш собственный код. Если вам нужно исправить что-то вроде String, сделайте это так, чтобы не изменить функциональность, как это задокументировано. Добавляйте только те новые материалы, которые не создают конфликтов или иным образом не мешают.

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

class MyClass
   include Facebook::AwesomeMethods
end

Когда вы просматриваете свой код, вы знаете, что в него включены и другие методы.

person Ariejan    schedule 25.10.2010
comment
если случится так, что все 5 драгоценных камней добавят методы к контроллеру приложения, то не будет ли контроллер приложения беспорядок? что, если есть даже одинаковые имена методов? - person nonopolarity; 25.10.2010
comment
Да, это плохая практика. Как я уже сказал, эти драгоценные камни должны требовать от вас явного включения модуля с методами. Единственное, что вы действительно можете сделать, это отправить отчет об ошибке для этих драгоценных камней и написать хорошую документацию для вашего AppController. - person Ariejan; 25.10.2010