Справедливо ли обвинять Rails в "магии"?
Когда я впервые начал изучать Rails и Django, меня отвлекли от Rails разработчики Django, которые чувствовали, что Rails - это черный ящик, в котором используется избыток "магии" (неплотные абстракции). После дальнейшего изучения Rails мне интересно, не является ли это неосведомленным предположением, основанным на незнании того, как выполнить настройку в Rails без использования скаффолдинга. Скаффолдинг сам по себе может показаться скрытым, но как только вы поймете, как создать проект без него, Rails, кажется, так же легко настраивается, как и Django. Это недоразумение с моей стороны или со стороны "магических" критиков Rails?
6 ответов
Rails широко использует средства метапрограммирования Ruby, чтобы выполнить большую часть тяжелой работы за вас, но в этом нет ничего волшебного - в конце концов, это всего лишь код и его можно понять, если уделить ему достаточно времени и усилий.
Scaffolding всегда задумывался как способ быстро начать работу с CRUD-операциями на ваших моделях. Предполагалось, что строительные леса будут заменены вашим реальным рабочим кодом.
Как вы думаете, Merb это? Это флаг разработчиков Rails, восстающих против слишком большого количества магии в Rails.
Rails 3 - это попытка сократить магию, затянуть множество частей Merb и привести в порядок вещи.
Сейчас действительно много магии? Может быть, но помни это. Rails - это, по сути, коллекция DSL (предметно-ориентированных языков), которые объединяются в качестве основы для веб-разработки. Вот почему он такой чистый, это язык для маршрутов, для шаблонов или ORM и т. Д. Чтобы сделать чистые DSL, вы должны расширить Ruby, что требует хороших усилий, некоторого волшебства или метапрограммирования.
Джанго не делает этого, это не было бы способом Python. Это не лучше и не хуже, только заметно отличается.
Теперь вы спросили, не слишком ли много магии в Rails?
Помните Третий закон предсказания Артура С. Кларка: Любая достаточно продвинутая технология неотличима от магии.
Так что, возможно, ваш друг-разработчик просто говорил, что Rails - слишком продвинутая технология, чтобы им было удобно пользоваться.
Для меня я могу прочитать исходный текст Rails и выяснить, что происходит. Конечно, это сложно в некоторых местах, но мне всегда удавалось пройтись по источнику, прочитать очень обширные юнит-тесты и узнать, как это работает. Ядро также очень сложное, но мы не отказываемся использовать его по этим причинам, не так ли?
Я бы не принял рекомендацию Pythonista относительно Rails больше, чем мнение Rubyist о Django, если только они не продемонстрируют разумный уровень понимания обеих платформ, по крайней мере, и есть очень немногие, кто может.
Фреймворки имеют (на мое ограниченное понимание на стороне Django) схожие архитектуры, но развиваются по-разному и используют преимущества разных языков.
Я бы согласился с тем, что в Rails довольно много "волшебства", а соглашение о переконфигурации является большой частью фреймворка. Я вижу, как это может оттолкнуть эксперта по Python, и это, вероятно, справедливо - одна из сильных сторон Ruby - это возможности метапрограммирования, которые заставляют волшебство происходить. Возможно, из-за этого обычно кажется, что исправление обезьян в Python считается подозрительным, тогда как в Ruby это обычное дело. Не лучше-хуже, просто другое.
Честно говоря, я думаю, что вы можете прекрасно провести время на любой платформе. Я бы посоветовал потратить два или три дня на создание простого приложения для каждого и выбрать то, которое вам понравилось больше всего. Мне было бы интересно увидеть отзывы о том, что вы выбрали и почему.
Возможно, вам будет полезно потратить некоторое время на чтение прошлых ответов на варианты этого вопроса (например, я объяснил свое мнение здесь).
Я думаю, что понятие "справедливый" здесь не так. Это все дело вкуса. Я в ужасе от того, что rails monkey исправляет встроенные типы ruby (приводя к таким вещам, как "5.days"). Я считаю это волшебством. Некоторые рубины могут посчитать это надежной инженерией.
Я думаю, что объективно сказать, что rails делает много неочевидных вещей с вашей языковой средой исполнения. Если вы считаете, это хорошо или плохо, решать вам.
Я не вижу, как рельсы можно рассматривать как черный ящик. У вас есть источник. Некоторые из рубинов немного сложны, и метапрограммирование может усложнить отслеживание, но все это вы можете увидеть. Кроме того, критика лесов не имеет смысла, если они не говорят о старых лесах, а не о сгенерированных лесах, которые просто создают базовые шаблоны кода, которые можно увидеть.
Я предполагаю, что djangoist не был не информирован, но он действительно имел в виду что-то еще, например, что рельсы используют слишком много хитрого рубина и топчутся по нескольким вещам, которые не следует делать из-за обезьяньего захвата классов ruby. Это тот случай, который можно сделать.
Конечно, они действительно не должны рвать рта, потому что я уверен, что Djangos едят детей в Австралии.