64 votes

Pourquoi les professionnels de Ruby on Rails n'utilisent-ils PAS Scaffolding ?

Je lis parfois, de la part de personnes qui semblent travailler avec rails depuis plus longtemps, qu'une leçon importante qu'ils ont apprise est "N'utilisez pas d'échafaudage". J'ai également lu sur irc des conseils allant dans ce sens. Ma question est de savoir pourquoi, quel est le point négatif ? Et est-ce que nifty_scaffolding mauvais aussi ?

Je pense qu'il est mauvais parce qu'il génère par défaut une version xml de votre action de contrôleur, ce qui exposerait les noms des champs de notre application à n'importe qui et la rendrait plus vulnérable aux attaques, alors peut-être est-ce cela ?

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

0 votes

J'ai cherché toutes les réponses mais je n'ai pas assez de raisons pour dire "N'utilisez pas d'échafaudage", juste quelques conseils si vous décidez de l'utiliser.

70voto

tybro0103 Points 13198

J'ai de l'expérience avec les rails et j'utilise rarement le scaffolding 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 de scaffolding. Certains codeurs le désapprouvent parce qu'il est en réalité échafaudage littéralement. Ce n'est pas un produit fini. L'échafaudage vous soutient pendant que vous construisez le produit réel. Cherchez "échafaudage" sur Google Images et vous devriez avoir une idée.

Gardez à l'esprit scaffold n'est qu'un des nombreux éléments intégrés Générateurs dans Rails . Un générateur Rails est simplement un script qui produit un code générique. Les générateurs sont très utiles pour gagner du temps, et vous vous retrouverez rapidement dans la situation suivante générateurs d'écriture pour vos propres besoins.

12voto

Michael K Madison Points 733

Je pense que la plupart des professionnels évitent les échafaudages parce qu'ils préfèrent une approche de développement piloté par les tests pour écrire le code de production. Cela signifie qu'ils veulent d'abord écrire un test qui échoue, puis écrire le code qui fait passer le test. C'est un excellent moyen de produire un code solide, mais il fonctionne mieux à un niveau très granulaire. L'échafaudage semble faire trop de choses à la fois et perturbe donc la boucle serrée qui consiste à écrire un test défaillant pour une fonctionnalité spécifique, puis à écrire le code qui fait passer cette fonctionnalité particulière. Il est peut-être plus important de prendre cette habitude que de profiter de la facilité d'utilisation de l'échafaudage.

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

10voto

Vikram Sharma Points 81

Il est important de comprendre l'utilisation des rails générateurs d'échafaudages et d'être conscient de leurs limites. L'échafaudage vous aide à faire fonctionner quelque chose rapidement et à tester une hypothèse. Mais dans le monde réel, il ne vous mènera pas très loin. Disons que vous avez créé un modèle avec un échafaudage

rails generate scaffold Article title:string body:text

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

rails generate migration add_to_article_author author:string
rake db:migrate

Maintenant, la table articles a une nouvelle colonne mais les fichiers dans /app/views/articles sont dans le même état, c'est-à-dire que le formulaire n'aura pas de champ auteur, etc. Si vous exécutez à nouveau Scaffold

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

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

Étant donné que toute application Rails digne de ce nom comporte du code personnalisé (et non du code passe-partout créé par Scaffold), un programmeur Rails ne devrait utiliser Scaffold que pour tester une idée. Utilisez Scaffold pour donner à votre client quelque chose avec lequel jouer. Mais dans le monde réel, le code standard de Scaffold n'est pas utilisé.

0 votes

J'utilise un échafaudage sur chaque projet. Il définit le schéma de base de ce que j'essaie de réaliser. Notez que j'utilise un schéma de base minimal. L'ajout d'attributs et autres est le même processus avec un schéma de base intact qu'avec un schéma de base brut. Le formatage du boilerplate est à votre convenance si vous ne voulez pas utiliser de tableaux, échangez-les. Cela évite des heures de tests pour découvrir que vous avez mal orthographié un attribut, un nom de fichier ou une colonne. J'ai un script supplémentaire que j'exécute après avoir généré une ressource avec un échafaudage qui m'aide à l'amener à un endroit que j'utilise actuellement.

6voto

coreyward Points 26109

Les échafaudages ne sont pas vraiment destinés à être utilisés en production. Il sert à démarrer rapidement une application et peut ensuite être modifié ou supprimé.

L'échafaudage de Rails 3 est en fait assez décent, mais il lui manque encore certaines choses, comme un moyen de gérer les ressources imbriquées, et il n'utilise pas la fonction plus simple respond_with (sur 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 fonctionnent sans être modifiés. Vous avez probablement des relations entre vos modèles qui se traduisent par une colonne dans la base de données, par exemple user_id . Lors de la création d'un échafaudage d'un modèle avec une relation, cette colonne apparaît comme un champ de texte dans le formulaire alors qu'elle devrait être déduite de l'URL ou sélectionnée via une autre interface plus conviviale.

De nombreux petits détails comme celui-ci font de l'échafaudage un candidat vraiment improbable pour un code prêt à l'emploi. Vous pouvez certainement construire 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 pense que la plupart des développeurs Rails le font dans une certaine mesure.

0 votes

Ok je pense qu'il est clair que vous devez modifier le code que l'échafaudage crée, mais j'étais plus intéressé par les dangers potentiels ou les inconvénients de l'échafaudage.

0 votes

Dans d'autres cadres, il peut y avoir des problèmes de sécurité. L'échafaudage de Rails est assez solide, cependant, il n'y a donc pas vraiment de "dangers" importants, à part la dépendance à l'échafaudage.

3voto

marflar Points 13293

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

  • Le scaffolding de Rails met tout dans un tableau html - je n'aime pas ça.
  • Je préfère utiliser rails_admin pour mes pages d'administration, de sorte qu'il n'est pas nécessaire d'utiliser 90 % du code de l'échafaudage.

Vos préoccupations en matière de xml ne sont pas la raison pour laquelle les gens déconseillent l'utilisation d'échafaudages. Je ne m'embête pas avec les versions XML de mes pages car cela double le nombre de routes que votre application doit générer, ce qui augmente un peu les frais généraux...

2 votes

PS : restez fidèle à l'échafaudage pendant votre apprentissage de rails, il est utile car il réduit la quantité de choses que vous devez savoir et vous aide à mettre en place votre application plus rapidement. Une fois que vous saurez ce que vous faites, vous arrêterez naturellement de faire tourner le générateur.

1 votes

Les formats de sortie sont gérés par un petit code dans le contrôleur. JSON et XML sont nativement supportés par Rails, vous n'avez donc même pas besoin d'une vue. Vos routes ne changent pas du tout en fonction du format (exécuter rake routes et voir l'implicite (.:format) à la fin de chaque itinéraire.

0 votes

Oui j'utilise uniquement nifty_scaffolding aussi parce qu'il semble être plus précis et laisse déjà beaucoup de code inutile et améliore la sécurité à mon avis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X