Справедливо ли обвинять Rails в «магии»?

Когда я впервые начал изучать Rails и Django, меня отвлекли от Rails разработчики Django, которые считали Rails черным ящиком, использующим избыток «магии» (дырявые абстракции). После дальнейшего изучения Rails я задаюсь вопросом, является ли это неосведомленным предположением, основанным на незнании того, как добиться настройки в Rails без использования строительных лесов. Может показаться, что строительные леса сами по себе многое скрывают, но как только вы поймете, как создать проект без них, Rails станет таким же настраиваемым, как и Django. Это недоразумение с моей стороны или со стороны «волшебных» критиков Rails?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
2 233
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Rails широко использует возможности метапрограммирования Ruby, чтобы сделать за вас большую часть рутинной работы, но здесь нет никакого волшебства - в конце концов, это всего лишь код, и его можно понять, потратив достаточно времени и усилий.

Строительные леса всегда задумывались как способ быстро приступить к работе с CRUD-операциями над вашими моделями. Намерение всегда заключалось в том, что строительные леса должны быть заменены вашим настоящим производственным кодом.

Я бы не стал прислушиваться к рекомендации Pythonista по поводу Rails не больше, чем к мнению Rubyist о Django, если только они не смогут продемонстрировать разумный уровень понимания обеих платформ, по крайней мере, а таких очень мало.

Фреймворки имеют (насколько я понимаю на стороне Django) похожие архитектуры, но выросли по-разному и используют сильные стороны разных языков.

Я согласен с тем, что в Rails есть изрядное количество «магии», а конвенция над конфигурацией - большая часть фреймворка. Я понимаю, как это может оттолкнуть эксперта по Python, и это, вероятно, справедливо - одна из относительных сильных сторон Ruby - это возможности метапрограммирования, благодаря которым происходит волшебство. Возможно, из-за этого обычно кажется, что исправление обезьян в Python считается подозрительным, тогда как в Ruby это обычное дело. Не лучше-хуже, просто другое.

Я искренне думаю, что вы можете отлично провести время, работая на любой платформе. Я бы посоветовал потратить два или три дня на создание простого приложения для каждого из них и выбрать то, которое вам больше всего понравилось. Мне было бы интересно узнать, что вы выбрали и почему.

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

Я предполагаю, что djangoist не был не информирован, но они на самом деле имели в виду что-то еще, например, что rails использует слишком много хитрого рубина и наступает на некоторые вещи, которых не должно быть, путем патчинга рубиновых классов. Это случай, который можно сделать.

Конечно, им не стоит ругать ругань, потому что я почти уверен, что Джанго ест младенцев в Австралии.

Как вы думаете, что такое Мерб? Это флаг разработчиков Rails, восставших против слишком большого количества магии в Rails.

Rails 3 - это попытка сократить магию, задействовать многие части Merb и навести порядок.

Неужели здесь действительно слишком много магии? Может быть, но помни об этом. Rails - это в основном набор DSL (доменных языков), которые составляют основу для веб-разработки. Вот почему он такой чистый, это язык для маршрутов, шаблонов, ORM и т. д. Чтобы сделать чистые DSL, вы должны расширить Ruby, что требует ну, немного магии или метапрограммирования.

Django этого не делает, это был бы не способ Python. Это не лучше и не хуже, только заметно отличается.

Теперь вы спросили, не слишком ли много магии в Rails?

Помните Третий закон предсказания Артура Кларка: Любая достаточно продвинутая технология неотличима от магии.

Так что, возможно, ваш друг-разработчик просто сказал, что Rails - слишком продвинутая технология, чтобы им было удобно пользоваться.

Что касается меня, я могу прочитать исходный код Rails и понять, что происходит. Конечно, местами это сложно, но я всегда мог пройтись по исходному тексту, прочитать очень обширные модульные тесты и узнать, как это работает. Ядро тоже безумно сложное, но мы не отказываемся от его использования по этим причинам, не так ли?

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

Я считаю, что понятие «справедливый» здесь неверно. Все дело вкуса. Я в ужасе, что rails monkey исправляет встроенные типы ruby ​​(что приводит к таким вещам, как «5. days»). Считаю это волшебством. Кто-то из рубистов может счесть это солидной инженерией.

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

Другие вопросы по теме