2008-09-23 18 views
24

¿Alguien ha establecido una buena convención de nombres para la acción en MVC? Estaba buscando específicamente ASP.net MVC, pero es una pregunta general. Por ejemplo, tengo una acción que muestra la pantalla de inicio de sesión (Inicio de sesión) y otra que procesa la solicitud de inicio de sesión desde esa página (LoginTest). No estoy interesado en los nombres y tengo muchas aplicaciones pendientes para escribir.Convención de nombres de acción

Respuesta

39

Rob Conery en MS sugirió algunos nombres útiles de estilo REST para las acciones.

* Index - the main "landing" page. This is also the default endpoint. 
* List - a list of whatever "thing" you're showing them - like a list of Products. 
* Show - a particular item of whatever "thing" you're showing them (like a Product) 
* Edit - an edit page for the "thing" 
* New - a create page for the "thing" 
* Create - creates a new "thing" (and saves it if you're using a DB) 
* Update - updates the "thing" 
* Delete - deletes the "thing" 

resultados en las URL a lo largo de las líneas de un foro (por)

* http://mysite/forum/group/list - shows all the groups in my forum 
* http://mysite/forum/forums/show/1 - shows all the topics in forum id=1 
* http://mysite/forums/topic/show/20 - shows all the posts for topic id=20 

Rob Conery on RESTful Architecture for MVC

+0

También veo que con el MVC más reciente puede establecer qué verbos son aceptados por una acción para que pueda nombrar una acción Editar tanto para la carga de la página inicial como para guardar la información. – stimms

+0

Parece que la publicación de Rob Conery es anterior a la capacidad de proporcionar tanto el formulario de visualización como el método de proceso denominado igual. También observo que la muestra de Cena Nerd tiene Editar, pero la plantilla del Controlador tiene Actualización para modificar una entidad. – Richard

+0

Me gusta: el único problema es que terminas con varios archivos de vista en el proyecto con el mismo nombre (por ejemplo, 'Editar'), lo que hace que sea confuso cuando trabajas con muchos archivos abiertos en VS.¿Alguien sabe una buena solución? Actualmente estoy llamando a las vistas "EditProduct", "ViewProduct", etc. –

0

El sufijo de acciones Django incorporado _done. Así que LoginDone sería la página que procesa el inicio de sesión (en ASP.NET MVC camel case style).

+0

Eso está bien, pero implica que el registro se ha completado en cuando en realidad la acción hecho está procesando el inicio de sesión . Quizás PromptLogin y Login. – stimms

0

Es bastante irrelevante qué convención utilice para el nombramiento de la acción del controlador, siempre y cuando sea consistente para usted y fácil de entender para quienes trabajan en ella.

En el caso de sus acciones de inicio de sesión, LoginDone está bien y en el mismo ProcessLogin será fácil de entender, por lo tanto, utilice una convención con la que se sienta cómodo.

Personalmente, probablemente estaría de lado con Login y ProcessLogin, ya que LoginDone es probablemente un poco engañoso en términos de lo que está haciendo la Acción; esto es por supuesto suponiendo que la Acción está reaccionando a las credenciales de los usuarios y verificando si son válidos . A continuación, puede pasar a otra Acción llamada LoginDone una vez que el inicio de sesión sea exitoso, o LoginFailed si no es así.

1

que he encontrado un blog post by Stephen Walther útil para buscar un constante esquema de nombres. También se derivan de un esquema de nombres de estilo REST, con algunas excepciones únicas que explica.

+1

El enlace ya no parece funcionar, va a una lista de artículos de MVC pero ninguno parece relevante para esta discusión. ¿Alguien tiene un enlace actualizado? –

+1

Aquí está el enlace actualizado: http://stephenwalther.com/blog/archive/2008/06/27/asp-net-mvc-tip-11-use-standard-controller-action-names.aspx –

+0

está roto también – Fedor

1

Rails tiene una buena convención de nomenclatura para operaciones CRUD: Rails Routing from the Outside In.

HTTP Verb Path Controller#Action Used for GET /photos photos#index display a list of all photos GET /photos/new photos#new return an HTML form for creating a new photo POST /photos photos#create create a new photo GET /photos/:id photos#show display a specific photo GET /photos/:id/edit photos#edit return an HTML form for editing a photo PATCH/PUT /photos/:id photos#update update a specific photo DELETE /photos/:id photos#destroy delete a specific photo

Esto es esencialmente una actualización de Paul Shannon's answer, desde su origen (Rob Connery) dice implícitamente que copió a su lista de rieles.

Cuestiones relacionadas