Pregunta

He estado desarrollando aplicaciones web durante un tiempo y estoy bastante cómodo con mySql, de hecho, muchas veces uso alguna forma de SQL casi todos los días. Me gusta la sintaxis y tengo cero problemas para escribir consultas u optimizar mis tablas. He disfrutado este mysql api .

Lo que me ha estado molestando es que Ruby on Rails usa ActiveRecord y migra todo, por lo que usa funciones para consultar la base de datos. Supongo que la idea es que nunca más tengas que mirar SQL. Tal vez esto no sea KISS (manténgalo simple y estúpido), pero ¿es la interfaz ActiveRecord realmente la mejor? Si es así, ¿por qué?

¿Es saludable el desarrollo sin tener que escribir una declaración SQL? ¿Qué pasa si alguna vez tiene que buscar algo que no está definido como una función de rieles? Sé que tienen una función que me permite hacer una consulta personalizada. Supongo que realmente quiero saber qué piensan las personas de las ventajas de usar ActiveRecord sobre mySQL y si alguien se siente como yo, tal vez esto sería para la comunidad de rieles lo que fue la calculadora para la comunidad matemática y algunas personas podrían olvidar cómo hacer mucho división.

¿Fue útil?

Solución

Tienes razón en que ocultar el SQL detrás de la capa de ActiveRecord significa que las personas podrían olvidarse de verificar el SQL generado. Yo mismo he sido mordido: índices faltantes, consultas ineficientes, etc.

Lo que permite ActiveRecord es facilitar las cosas fáciles:

Post.find(1)

vs

SELECT * FROM posts WHERE posts.id = 1

Usted, el desarrollador, tiene menos que escribir y, por lo tanto, tiene menos posibilidades de error.

La validación es otra cosa que ActiveRecord facilita. Tienes que hacerlo de todos modos, entonces, ¿por qué no tener una manera fácil de hacerlo? Con las partes repetitivas, aburridas, abstraídas?

class Post < ActiveRecord::Base
  validates_presence_of :title
  validates_length_of :title, :maximum => 80
end

vs

if params[:post][:title].blank? then
  # complain
elsif params[:post][:title].length > 80 then
  # complain again
end

De nuevo, fácil de especificar, fácil de validar. ¿Quieres más validación? Una sola línea para agregar a un modelo ActiveRecord. El código complicado con múltiples condiciones siempre es más difícil de depurar y probar. ¿Por qué no te lo pone fácil?

Lo último que realmente me gusta de ActiveRecord en lugar de SQL son las devoluciones de llamada. Las devoluciones de llamada se pueden emular con activadores de SQL (que solo están disponibles en MySQL 5.0 o superior), mientras que ActiveRecord ha tenido devoluciones de llamada desde entonces (comencé en 0.13).

Para resumir:

  • ActiveRecord facilita las cosas fáciles;
  • ActiveRecord elimina las partes aburridas y repetitivas;
  • ActiveRecord no impide que escriba su propio SQL ( generalmente por razones de rendimiento), y finalmente;
  • ActiveRecord es totalmente portátil en la mayoría de los motores de bases de datos, mientras que SQL no lo es (a veces).

Sé que en tu caso estás hablando específicamente de MySQL, pero aún así. Tener la opción es bueno.

Otros consejos

La idea aquí es que al poner su lógica de base de datos dentro de sus registros activos, está tratando con el código SQL en un solo lugar, en lugar de extenderse por toda su aplicación. Esto facilita que las diferentes capas de su aplicación sigan el Principio de responsabilidad única (que un objeto debe tener una sola razón para cambiar).

Aquí está un artículo sobre el patrón Active Record .

Evitar SQL le ayuda cuando decide cambiar el esquema de la base de datos. La abstracción también es necesaria para todo tipo de cosas, como la validación. No quiero decir que no escribas SQL: siempre puedes hacerlo si sientes la necesidad de hacerlo. Pero no tiene que escribir una consulta de 5 líneas donde todo lo que necesita es user.save. La filosofía de los rieles es evitar códigos innecesarios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top