Почему профессионалы Ruby on Rails НЕ используют Scaffolding? - PullRequest
62 голосов
/ 18 июля 2011

Я иногда читаю от людей, которые, кажется, работают с рельсами дольше, что один важный урок, который они усвоили, это «Не используйте строительные леса».Также на IRC я ​​обычно читаю подсказки с этого направления.У меня вопрос, почему, что в этом плохого?И является ли nifty_scaffolding также плохим?

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

Каковы ваши причины не делать строительные леса?

Ответы [ 7 ]

69 голосов
/ 18 июля 2011

У меня есть опыт работы с рельсами, и я редко использую строительные леса просто потому, что моя конечная цель далека от простых действий CRUD. Тем не менее, нет строгого правила не использовать строительные леса. Некоторые программисты нахмурились, потому что это на самом деле строительные леса , буквально. Это не готовый продукт. Scaffolding поддерживает вас при создании реального продукта. Поищите в Google изображения "scaffolding", и вы должны понять.

Имейте в виду, scaffold - это только один из многих встроенных генераторов в Rails . Генератор Rails - это просто скрипт, который выводит некоторый общий код. Генераторы очень полезны для экономии времени, и вы быстро найдете 1010 * пишущих генераторы для своих собственных нужд.

12 голосов
/ 22 августа 2013

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

Это сказало, что леса могут быть довольно мощными сами по себе.

9 голосов
/ 05 августа 2014

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

rails generate scaffold Article title:string body:text

Отлично! Теперь у вас есть готовый прототип. Но теперь допустим, что вам нужно добавить еще одно поле «автор».

rails generate migration add_to_article_author author:string
rake db:migrate

теперь в статьях таблицы появился новый столбец, но файлы в / app / views / article находятся в том же старом состоянии, то есть в форме не будет поля автора и т. Д. Если вы снова запустите scaffold

rails generate scaffold Article title:string author:string body:text --skip-migration

На этот раз вы добавили --skip-migrate, потому что это было сделано раньше, и Rails действительно будет жаловаться, если вам придется перенести ту же таблицу снова. Теперь scaffold предложит вам перезаписать файл, который он создал в первый раз. Перезапись также уничтожит любые изменения, которые вы внесли в свой контроллер /app/controllers/article_controller.rb или просмотрит файлы, такие как /app/views/article/show.html.erb или index.html.erb

Поскольку любое стоящее приложение Rails имеет собственный код (а не шаблонный код, созданный scaffold), программист Rails должен использовать scaffold только для проверки идеи. Используйте эшафот, чтобы дать вашему клиенту что-нибудь для игры. Но в реальной жизни кодовый шаблон не используется.

6 голосов
/ 18 июля 2011

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

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

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

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

3 голосов
/ 18 июля 2011

Я не использую строительные леса по двум причинам:

  • В Rails scaffolding все помещается в html-таблицы - мне это не нравится
  • Я предпочитаю использовать rails_admin gem для моих страниц администратора, поэтому нет необходимости в 90% кода скаффолда

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

2 голосов
/ 22 августа 2013

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

Возможно, вы какое-то время счастливо плелись вместе со скаффолдингами, и затем вы понимаете, что забыли включить логическое поле published для вашей модели Post,поэтому вы генерируете миграцию для добавления атрибута в таблицу (вам удалось это решить).Затем вы также должны решить, как добавить это в форму, созданную скаффолдом. Тогда за свою жизнь вы не можете понять, почему он не обновляется, когда вы отправляете свою форму, и после долгих хлопот и потерянного времени вы обнаруживаете, что не допустили массовое назначение для этого атрибута, такого как скаффолдсделал для вас на других.Оказывается, вы ничего не знаете о том, как работает Rails.

Если вы изучаете Rails, вы гораздо больше разберетесь в MVC, если бы вы сами создали M, V и C.

0 голосов
/ 22 августа 2013

Я думаю, что леса очень хороши, чтобы проверить новые вещи в новых версиях rails (например, теперь в rails 4 параметры разрешают вещи в контроллере). Вы можете использовать его для быстрого прототипирования. Часто просто не нужно создавать полный каркас ..

...