Это одна из тех вещей, где нет правильного ответа. Когда вы смешиваете в devise, он добавляет около 4 методов в actioncontroller, эти методы документированы, и вы должны прочитать документацию перед использованием любой библиотеки. По сути, это «интерфейс» для драгоценного камня. Все по-прежнему заключено в модуле, единственное отличие состоит в том, что ActiveRecord ни к чему не причастен, библиотека Devise - это та, которая выполняет интеграцию. Кроме того, людям, которые занимаются разработкой устройства, для написания интеграции нужно писать меньше и меньше кода, а вам, как пользователю, не нужно писать столько кода для его использования.
Теперь, теоретически, это ЗОМГ, КОТОРЫЙ УПАЕТ! тип ситуации. В действительности, очень редко вещи разрушают другие вещи, если они выполняются правильно (т.е. инкапсулируют все в миксине, переопределяют метод, не забудьте вызвать super). Даже когда вы сталкиваетесь с этими типами проблем, (после первого раза) обычно очень легко понять, что происходит. Это в основном другая форма наследования, которая является одной из основополагающих концепций ООП.
Подобные действия также позволяют библиотекам добавлять функции в другие библиотеки или даже в основной язык. Это позволяет изящно решать действительно сложные ситуативные проблемы. Это также означает, что состояние языка движется вперед НАМНОГО быстрее, чем если вам придется ждать, пока какая-либо новая функция будет запущена, прежде чем вы сможете ее использовать, и позволяет кросс-версионному кодированию быть довольно элегантным с помощью полифиллов. Я думаю, что это одна из лучших функций в любом языке, которая его реализует, и работа на более ограничительных языках представляет собой реальную боль, потому что вы чувствуете, что у вас на плече маленький полицейский, который говорит вам, что вы не ' t достаточно умен, чтобы использовать мощные языковые функции для решения ваших проблем.
Теперь, если вы скажете: "ООП - это беспорядок, и у нас не должно быть неприятного типа связи, введенного наследованием", я бы полностью с вами согласился. Но это другое обсуждение:)