web-dev-qa-db-fra.com

Pourquoi Ruby on Rails les professionnels n'utilisent PAS d'échafaudage?)

Je lis parfois des gens qui semblent travailler avec Rails depuis plus longtemps, cette leçon importante qu'ils ont apprise serait "N'utilisez pas d'échafaudage". Également sur irc, je lis couramment des conseils de cette direction Ma question est pourquoi, quelle est la mauvaise chose à ce sujet? Et nifty_scaffolding mauvais aussi?

Je suppose que c'est mauvais car il génère par défaut une version xml de votre action de contrôleur, ce qui exposerait les noms de champ de notre application à n'importe qui et la rendrait plus vulnérable aux attaques, alors peut-être que c'est ça?

Quelles sont vos raisons de ne pas faire d'échafaudage?

62
tmaximini

Je suis expérimenté avec Rails et j'utilise rarement l'échafaudage simplement parce que mon objectif final est loin d'être de simples actions CRUD. Cependant, il n'y a pas de règle stricte pour ne pas utiliser l'échafaudage. Certains codeurs froncent les sourcils car il est en fait échafaudage, littéralement. Ce n'est pas un produit fini. L'échafaudage vous aide à construire le produit réel. Recherchez les images d'échafaudage sur Google et vous devriez avoir l'idée.

Gardez à l'esprit que scaffold n'est qu'un des nombreux générateurs intégrés dans Rails . Un générateur Rails est simplement un script qui génère du code générique. Les générateurs sont des gains de temps très utiles, et vous vous retrouverez rapidement à écrire des générateurs pour vos propres besoins personnalisés.

69
tybro0103

Je crois que la plupart des professionnels évitent les échafaudages car ils préfèrent une approche de développement pilotée par les tests pour écrire du code de production. Cela signifie qu'ils veulent d'abord écrire un test qui échoue, puis écrire le code qui réussit le test. C'est un excellent moyen de produire du code fort, mais cela fonctionne mieux à un niveau très granulaire. L'échafaudage semble en faire trop à la fois et il perturbe donc une boucle étroite d'écriture d'un test d'échec pour des fonctionnalités spécifiques, puis d'écriture du code qui fait passer cette fonctionnalité particulière. Il peut être plus important de prendre cette habitude au-delà de la facilité d'utilisation des échafaudages.

Cela dit, l'échafaudage peut être assez puissant en soi.

12
Michael K Madison

Il est important de comprendre l'utilisation de Rails générer un échafaudage et être conscient de ses limites. L'échafaudage vous aide à faire fonctionner quelque chose rapidement et à tester une hypothèse. Mais dans le monde réel, il ne vous obtiendra pas trop loin. Disons que vous avez créé un modèle avec un échafaudage

Rails generate scaffold Article title:string body:text

Génial! Vous avez maintenant un prototype prêt. Mais maintenant, disons que vous devez ajouter un autre champ "auteur".

Rails generate migration add_to_article_author author:string
rake db:migrate

maintenant, les articles du tableau ont une nouvelle colonne mais les fichiers dans/app/views/articles sont dans le même ancien état, c'est-à-dire que le formulaire n'aura pas de champ d'auteur, etc. Si vous exécutez à nouveau l'échafaudage

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

Cette fois, vous avez ajouté --skip-migrate car cela a été fait auparavant et Rails se plaindra vraiment si vous deviez migrer à nouveau la même table. Maintenant, l'échafaudage vous invitera à écraser le fichier qu'il créé la première fois. L'écrasement détruira également toutes les modifications apportées à votre contrôleur /app/controllers/article_controller.rb ou affichera des fichiers comme /app/views/article/show.html.erb ou index.html.erb

Étant donné que toute application Rails a un code personnalisé (et non du code passe-partout créé par un échafaudage), un programmeur Rails ne doit utiliser l'échafaudage que pour tester une idée. Utilisez l'échafaudage pour donnez à votre client quelque chose à jouer. Mais dans le monde réel, le code d'échafaudage passe-partout n'est pas utilisé.

9
Vikram Sharma

L'échafaudage n'est pas vraiment destiné à la production. Il est destiné à amorcer rapidement une application, puis à la modifier ou à la supprimer.

L'échafaudage Rails 3 est en fait assez décent, mais il manque encore certaines choses comme un moyen de gérer les ressources imbriquées et il n'utilise pas le respond_with Plus simple (plus de respond_to, Qui encourage la verbosité là où elle n'est pas nécessaire ou bienvenue).

Il est peu probable que les formulaires d'échafaudage par défaut ne fonctionnent pas non plus - vous avez probablement des relations entre vos modèles qui se traduisent par une colonne dans la base de données comme user_id. Lors de la création d'un échafaudage d'un modèle avec une relation, cette colonne apparaît sous la forme d'un champ de texte dans le formulaire lorsqu'il doit clairement être déduit de l'URL ou sélectionné via une autre interface plus conviviale.

Il y a beaucoup de petits détails comme celui-ci qui font de l'échafaudage un candidat très improbable pour un code prêt à la production prêt à l'emploi. Vous pouvez certainement créer une application en générant l'échafaudage, puis en comblant les lacunes et en nettoyant les zones dont vous n'avez pas besoin, et je soupçonne que la plupart des développeurs Rails le font dans une certaine mesure.

6
coreyward

Je n'utilise pas d'échafaudage pour deux raisons:

  • L'échafaudage Rails met tout dans des tableaux html - je n'aime pas ça
  • Je préfère utiliser Rails_admin gem pour mes pages d'administration donc il n'y a pas besoin de 90% du code d'échafaudage

Vos préoccupations concernant le XML ne sont pas la raison pour laquelle les gens déconseillent l'utilisation d'échafaudages. Je ne me soucie pas des versions XML de mes pages car cela double le nombre de routes que votre application doit générer, ce qui augmente à son tour les frais généraux ...

3
stephenmurdoch

Jusqu'à présent, les gens ont dit que les programmeurs expérimentés Rails n'utilisent pas d'échafaudage, et pour de bonnes raisons principalement. Je préconise que les débutants n'utilisent pas d'échafaudage non plus.

Vous avez peut-être cheminé joyeusement pendant un certain temps avec l'échafaudage, puis vous vous rendez compte que vous avez oublié d'inclure le champ booléen published pour votre modèle Post, vous générez donc une migration pour ajouter l'attribut à la table (vous 'ai réussi à comprendre cela). Vous devez ensuite trouver comment ajouter cela au formulaire produit par l'échafaudage. Ensuite pour la vie de vous, vous ne pouvez pas comprendre pourquoi il ne se met pas à jour lorsque vous soumettez votre formulaire, et après beaucoup de conflits et de temps perdu, vous comprenez que vous n'avez pas autorisé l'attribution de masse sur cet attribut comme échafaudage fait pour vous sur les autres. Il s'avère que vous ne savez vraiment rien sur le fonctionnement de Rails.

Si vous apprenez Rails, vous en comprendrez beaucoup plus sur MVC si vous construisez vous-même le M the V et le C.

2
Mike Campbell

Je pense que l'échafaudage est très bon pour vérifier les nouveaux trucs des nouvelles versions Rails (par exemple maintenant dans Rails 4 les paramètres permettent les trucs dans un contrôleur). Vous pouvez l'utiliser pour un prototypage rapide. Il n'est souvent pas nécessaire de générer un échafaudage complet.

0
Matthias