2012-03-28 6 views
7

Tuve una discusión recientemente con un amigo mío que también es desarrollador de RoR. Discutimos sobre cómo los modelos de Rails deberían ser gestionados. Personalmente, me gusta dejar en el espacio de nombres predeterminado solo los modelos raíz (por ejemplo, usuario, artículo, factura, etc.) y los modelos dependientes van a un módulo (por ejemplo, usuario :: perfil, usuario :: actividad) con el nombre de la raíz modelo con el que están asociados.Modelos de espaciado de nombres en una aplicación de Rails

Por otro lado, he visto muchos proyectos que tenían como 100 modelos en el espacio de nombres predeterminado llamado como perfil_usuario, actividad_usuario, etc. A juzgar por el desarrollo de Java (Spring), la comunidad java tiende a organizar clases en paquetes y agruparlos lógicamente, lo que me parece muy atractivo. hay algún inconveniente en modelos de agrupación de módulos (excepto el extra:: class_name en relación definición)

Entonces la pregunta es ¿hay alguna y razones específicas por las personas por lo general no lo hacen?

Respuesta

4

Aunque el espacio de nombres tiene sus ventajas, requiere agregar excepciones en todos los modelos. Foo :: Bar supone un nombre de tabla de bars y también bar_id para asociaciones, mientras que en su lugar puede preferir foo_bars y foo_bar_id.

Si realmente está convencido de esto, le recomendamos que vea si hay un complemento que lo solucione, o implemente su propia extensión.

El único caso en el que he usado espacios de nombres es para complementos que se van a utilizar en aplicaciones de terceros en el que no quiero reclamar nombres de los modelos de nivel de raíz ya que sería molesto. El esfuerzo extra en este caso vale la pena.

Si le molesta ver más de 100 archivos de modelos sin agrupar, probablemente le molestará igualmente ver más de 100 tablas sin agrupar, y eso generalmente es algo que no puede solucionar.

Los controladores se prestan a la agrupación con bastante naturalidad, pero los modelos no se acomodan tan fácilmente, al menos no con stock ActiveRecord.

+2

No recuerdo la última vez que abrí el explorador de la base de datos. Con ruby, es natural que se abstraigan tales cosas. Por lo que recuerdo, Foo :: Bar generará una tabla "foo_bar". El único inconveniente es que debe especificar a: class_name => Foo :: Bar en asociaciones. Me pregunto cómo se supone que una aplicación de rieles maneja una aplicación compleja si anima a mantener todos los modelos en un solo directorio. Quiero decir, si la aplicación crece demasiado, ¿es el espacio de nombres una parte de la refactorización necesaria o uno simplemente cambia a Java?) – FreeCandies

+6

Normalmente uso el método de usar el prefijo como una especie de espacio de nombres, así que creas cosas como Perfil de usuario y Actividad de usuario en lugar de Perfil o Actividad. Esto lleva a un tipo natural de agrupación en el listado. Es raro ver una aplicación con más de 500 modelos que se beneficiarían significativamente del espacio de nombres. Complicado es complicado. A veces es mejor ser honesto sobre cuán compleja es tu aplicación que tratar de pretender que es realmente simple enterrando la complejidad y haciendo que sea más difícil encontrar cosas. – tadman

Cuestiones relacionadas