¿Qué nombres ponerles a nuestros componentes en un framework MVC?

Este es un tema por el que he pasado un tiempo analizando y no encontrando información "oficial" explícita sobre cómo debemos nombrar nuestros módulos/controllers, principalmente si usar palabras en "singular" o en "plural" (si alguien encuentra, me avisa). A veces, la forma de llegar a un criterio es buscar ejemplos en otros proyectos y aprender de la experiencia de otros, pero no fue el caso, ya que podemos encontrar tanto como (inglés o castellano):
  • "usuarios" o "usuario"
  • "facturas" o "factura"
  • "stocks" o "stock"
  • "proveedores" o "proveedor"
  • "páginas" o "página"
  • etc
Si alguien tiene la misma duda, paso a comentarles mis criterios para que tengan una referencia más a la hora de decidirse ;-)

En lo personal estaba usando el siguiente criterio (que no quiere decir que sea correcto ni el mejor): que la url fuera coherente con su lectura, es decir, prefiero que diga:
  • surforce.com/usuarios/ficha/ver/id/1
Y no
  • surforce.com/usuario/ficha/ver/id/1
Ya que es funcionalidad (módulo) que se aplica a "todos" los usuarios y no a un usuario, y el controller afecta a un solo usuario (y así ajustar los nombres de los elementos).

Ejemplos:
  • A pesar que existe en la documentación referencia a los módulos, no especifica exactamente cómo nombrarlos, aunque muestra ejemplos tanto en singular como en plural.
  • En los mismos ejemplos muestran "blog" y "news", por lo que yo lo analizaría por el lado de "si es un módulo de blog (uno) lo usaría en singular, pero si es un módulo que maneja varios blogs (más de uno), lo llamaría blogs" ("módulo de blogs").
Usando un poco el sentido común, sin pensar en MVC ni en ZF, ¿si necesitara crear módulos para un sistema, qué nombres les daríamos?
  1. Sistema de Gestión de Usuarios -> modulo "usuarios"
  2. Sistema de Gestión de Administración -> modulo "admin"
  3. Sistema de manejo de Stock -> modulo "stock"
  4. Sistema de manejo de Ventas -> módulo de "ventas"
Indistintamente de lo que hagan otros proyectos (como Magento, que veo que muchos usan como único referente), tendríamos que analizar más proyectos o encontrar algo "oficial" de la propia Zend.

Mi criterio sobre el tema de "nombres":
  • Una cosa es el nombre de un Model, donde yo usaría lo mismo que el criterio general de nombre de clases de POO, en singular.
  • Otra cosa son los controllers, que actualmente estoy usando más que nada el criterio de "url usable", que quede coherente a la lectura (no es lo mejor -sé que se pueden configurar las url's- pero tampoco encontré una documentación oficial que aclare este tema), por lo tanto si se aplica a uno o a muchos, usaría singular o plural.
  • Y otra cosa es el nombre del módulo, que creo también pasa por el tema de nuestra decisión de nombres, más que un tema de nombre de Clase o de Controller (por más que todos son "clases", son "especiales" y específicas del MVC y de Zend), también usaría singular o plural.
Creo que por ahí pasa la discusión, no sé que piensan ustedes y qué criterios usan para definir los nombres de sus componentes, sean tanto en Zend como en otros frameworks que usan MVC.

Soy todo oídos ;-)

6 comentarios:

José Zanni dijo...

Antes trabajaba usando CakePHP, y como alli los controladores por defecto siempre tienen que ser en plural, es algo que no me planteé nunca el modificarlo, usuarios, blogs, stocks, catalogos, etc.

Ahora estoy usando CodeIgniter, que permite libertad en ese sentido y veo que seguí con el plural por inercia, pero creo que sería más lógico "usar la lógica" :P

Así que para casos como "catalogo" pienso que lo mejor sería usar "catalogo", en singular. Pero para el caso "usuarios" yo creo que es mejor en plural, ya que el controlador se encarga de gestionar los usuarios, asi que me parece lógico que sea en plural, aunque quede /usuarios/list y /usuarios/profile

pac-man  dijo...

Justamente el otro dia estaba pensando sobre este tema, singular o plural.

Actualmente laburo con un sistema y por ejemplo las tablas son todas en singular, me parecia extraño, ya que por lo que me enseñaron ( metodologia en sistemas ) hay que usarlas en plural y por logica es lo mas conveniente ( para mi ).

Aunque cada uno maneja sus perspectiva.

SaluDOS!

enrique_place dijo...

Que tal José ;-)
Mirá, no conocía esta forma de trabajo de Cake, es lo bueno de que los frameworks te guíen, así no tienes que estar invirtiendo tiempo en ver cómo hacerlo. ;-)

Lo que comentas es exactamente a la conclusión que llego usando un poco de lógica ;-)

Que tal Pac-Man ;-)
Es un estándar de facto que las tablas son en plural, no conozco sistema bien diseñado que use tablas en singular!!! :-(

Si trabajas con objetos, las clases son siempre en singular, si son tablas, son siempre en plural, ya que es lo que representan.

Clase Cliente, representa el "modelo" para crear objetos de tipo "Cliente" (no vas a encontrar ningún tipo de dato en plural: Integer, String, Array, etc), mientras que las tablas almacenan una o más tuplas que representa cada una es un registro del tema que almacenan, es decir, si la tabla es "clientes" significa que tendrás por cada tupla una representación de un "cliente", entonces el conjunto tienes "múltiples clientes" (por lo que es lógico que sea "plural").

En sí es por eso que se hace de esta forma, por lo que representan.


La discusión es un poco más delicada con los controllers o con los módulos, pero podemos llegar al caso que los módulos dependerá de lo que representen, con los controllers estamos entre medio de dos abismos, ya que también son clases y las estamos nombrando en plural.

Gracias por sus aportes ;-)

José Zanni dijo...

La verdad es que CakePHP me ayudó muchísimo a encontrar una manera de organizar los proyectos.

meigallo dixital dijo...

La razón de los plurales e cakephp (o rails) es por el tema de convención sobre configuración, por defecto busca el modelo que en singular tenga el mismo nombre que el controllador que va en plural. Luego hay que adaptarlo al idioma ya que si llamas al modelo categoria 'se cree' que el el controlador es categorium ya que está preparado para las terminaciones al inglés y ahí ya tienes que tirar de inflector para crear excepciones.

Yo soy de modelo en singular y el controlador en plural, me parece 'lógico'.

enrique_place dijo...

Que tal estimado Meigallo ;-)
> Yo soy de modelo en singular y
> el controlador en plural, me
> parece 'lógico'.

Muy buen aporte, no me acordaba de esto en el tiempo que investigué RoR, pero es verdad, además, teníamos la opción de configurar a mano los nombres para que no hubiera problemas con esta conversión "plural / singular".

Como que el tema queda medio cerrado ;-)

Abrazos!

Entradas populares