2011-07-18 15 views
57

Leí a veces de personas que parecen estar trabajando con rieles desde hace más tiempo, esa importante lección que aprendieron sería "No utilizar andamios". También en IRC leo comúnmente sugerencias desde esta dirección. Mi pregunta es por qué, ¿qué tiene de malo? Y es nifty_scaffolding malo también?¿Por qué los profesionales de Ruby on Rails NO usan Andamios?

Mi conjetura sería que es malo, ya que genera de forma predeterminada una versión XML de la acción del controlador, lo que expondría los nombres de los campos de nuestra aplicación a nadie y que sea más vulnerable a los ataques, así que quizás es esto?

¿Cuáles son sus razones para no hacer andamios?

+0

He criado todas las respuestas, pero no tengo suficientes razones para decir "No usar andamio" solo unos pocos consejos cuando decida usarlo. – alex

Respuesta

68

Tengo experiencia con los raíles y rara vez uso andamios simplemente porque mi objetivo final no es simplemente acciones CRUD. Sin embargo, no hay una regla estricta para no usar andamios. Algunos codificadores fruncen el ceño porque es en realidad andamios, literalmente. No es un producto terminado. El andamio lo apoya a medida que construye el producto real. Buscar imágenes de google para "andamios" y debería tener la idea.

Tenga en cuenta scaffold es uno de los muchos generators in Rails incorporados. Un generador de Rails es simplemente un script que genera un código genérico. Los generadores son ahorradores de tiempo muy útiles, y usted se encontrará rápidamente writing generators para sus necesidades personalizadas.

6

El andamio no está diseñado para el uso en producción. Está destinado a obtener una aplicación iniciada rápidamente y luego se puede modificar o eliminar.

los carriles 3 andamios es en realidad bastante decente, pero todavía carece de algunas cosas como una forma de manejar los recursos anidados y que no utiliza la más simple respond_with (más respond_to, que anima a la verbosidad en los que no es necesaria o bienvenido)

Es poco probable que los formularios de andamio predeterminados también funcionen sin modificaciones; es probable que tenga relaciones entre sus modelos que se traducen a una columna en la base de datos como user_id. Al crear un andamio de un modelo con una relación, esta columna aparece como un campo de texto en el formulario cuando claramente debe deducirse de la URL o seleccionarse a través de otra interfaz, más fácil de usar.

Hay muchos detalles pequeños como este que hacen que el andamio sea un candidato poco probable para el código de producción lista para usar. Sin duda, puedes construir una aplicación generando el andamio y luego completando las lagunas y limpiando las áreas que no necesitas, y sospecho que la mayoría de los desarrolladores de Rails hacen esto hasta cierto punto.

+0

bien, creo que está claro que debe modificar el código que crea el andamio, pero estaba más interesado en los posibles peligros o desventajas de los andamios. – tmaximini

+0

En otros marcos, puede haber problemas de seguridad. El andamiaje de rieles es bastante sólido, por lo que no existen realmente "peligros" duros aparte de la dependencia del andamio. – coreyward

3

No consumo andamios por dos razones:

  • rieles andamios pone todo en unas tablas html - no me gusta que
  • Yo prefiero usar rails_admin joya para mis páginas de administración por lo que hay hay necesidad de que el 90% del código andamio

Sus preocupaciones XML no son la razón de por qué las personas aconsejan no utilizar andamios. No me molesto con las versiones XML de mis páginas, ya que duplica la cantidad de rutas que su aplicación debe generar, lo que a su vez aumenta un poco los gastos generales ...

+1

PS: quédate con los andamios mientras aprendes los rieles, es útil porque reduce la cantidad de cosas que necesitas saber y te ayuda a poner tu aplicación en funcionamiento más rápido. Una vez que sepa lo que está haciendo, naturalmente dejará de funcionar el generador. – stephenmurdoch

+1

Los formatos de salida se manejan en un pequeño código en el controlador. JSON y XML son soportados nativamente por Rails, por lo que ni siquiera necesita una vista. Sus rutas no cambian para el formato en absoluto (ejecute 'rake routes' y vea el' (.formato) 'implícito' al final de cada ruta. – coreyward

+0

sí, solo uso nifty_scaffolding también porque parece ser más preciso y deja fuera un montón de código innecesario y mejora la seguridad en mi opinión. – tmaximini

12

Creo que la mayoría de los profesionales evitan el andamiaje porque prefieren un enfoque de desarrollo basado en pruebas para escribir el código de producción. Esto significa que primero quieren escribir una prueba que falla y luego escribir el código que hace pasar la prueba. Esta es una gran manera de producir código fuerte, pero funciona mejor a un nivel muy granular. El andamiaje parece hacer demasiado al mismo tiempo y, por lo tanto, interrumpe un ciclo estrecho de redacción de una prueba fallida para características específicas y luego escribe el código que hace que pase esa característica en particular. Puede ser más importante entrar en ese hábito más allá de la facilidad de uso de andamios.

Dicho andamio puede ser bastante poderoso en sí mismo.

0

Creo que el andamio es muy bueno para ver las novedades de las nuevas versiones de rieles (por ejemplo, ahora en rieles 4, los params permiten cosas en un controlador). Puede usarlo para crear rápidamente prototipos. A menudo es simple no es necesario generar un andamio completo ..

2

Las personas hasta ahora han dicho que los programadores de rieles experimentados no usan andamios, y por buenas razones principalmente. Abogo por que los principiantes no usen andamios tampoco.

Es posible que haya estado caminando felizmente durante algún tiempo con andamios, y luego se da cuenta de que olvidó incluir el campo booleano published para su modelo de publicación, por lo que genera una migración para agregar el atributo a la tabla (' he logrado resolver eso). También debe averiguar cómo agregar eso a la forma que produjo el andamio. Luego por la vida de usted no puede entender por qué no se actualiza cuando envía su formulario, y después de mucha lucha y tiempo perdido, se da cuenta de que no ha permitido la asignación masiva de ese atributo como el andamio lo hizo por usted los demás. Resulta que realmente no sabes nada sobre cómo funciona Rails.

Si está aprendiendo Rails, entendería mucho más acerca de MVC si construyera el M the V y C usted mismo.

+0

"Resulta que realmente no sabes nada sobre cómo funciona Rails". – suzumakes

7

Es importante entender el uso de los carriles para generar andamios y ser consciente de sus limitaciones. El andamiaje te ayuda a hacer que algo funcione rápidamente y probar una suposición. Pero en el mundo real no te llevará demasiado lejos. Digamos que usted creó un modelo con andamios

rails generate scaffold Article title:string body:text 

¡Estupendo! Ahora tienes un prototipo listo. Pero ahora digamos que tiene que agregar otro campo "autor".

rails generate migration add_to_article_author author:string 
rake db:migrate 

ahora los artículos de tabla tiene una columna nueva, pero los archivos en/app/views/artículos se encuentran en el mismo estado viejo es decir, la forma no tendrá campo de autor, etc. Si se ejecuta de nuevo andamiaje

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

Esta vez ha agregado --skip-migrate porque eso ya se ha hecho antes y Rails realmente se quejará si tuviera que migrar la misma tabla de nuevo. Ahora el andamio le pedirá que sobrescriba el archivo que creó la primera vez. La sobrescritura también destruirá cualquier cambio que haya realizado en su controlador /app/controllers/article_controller.rb o visualizará archivos como /app/views/article/show.html.erb o index.html.erb

, ya que cualquier aplicación de Rails que valga la pena tiene un código personalizado (y no un código repetitivo creado por el andamio), un programador de Rails debe usar el andamio solo para probar una idea. Use andamios para darle a su cliente algo con lo que jugar. Pero en el mundo real, el código del andamio repetitivo no se usa.