¿Es mejor tener acciones separadas Crear y Editar o combinar Crear y Editar en una sola?

15

Estamos utilizando ASP.NET MVC 2 con una capa de presentación de controlador / vista y un modelo que consiste en una capa de lógica de negocios, capa de acceso a datos [procedimientos almacenados y clases / métodos para hablar con los procedimientos almacenados].

En la capa empresarial y superiores para la mayoría de los propósitos, Editar parece ser capaz de representar tanto la creación de un objeto como la edición de un objeto. Esto coincide bien con nuestro patrón de diseño de repositorio que define un método "Guardar". Simplemente podemos verificar en el procedimiento almacenado si la ID es 0 y luego crear un nuevo objeto si es 0, de lo contrario, podemos actualizar el objeto existente, ya que la identificación de la categoría debe coincidir con uno.

El punto principal de discusión es si tiene más sentido dividir la Edición que incluye la Creación en sus partes separadas de Crear y Editar más allá de la capa DAL.

Un ejemplo obvio se puede mostrar como rutas:

Crear - http: // someurl / somearea / edit / 0

Editar - http: // someurl / somearea / edit / 254

vs.

Crear - http: // someurl / somearea / create

Editar - http: // someurl / somearea / edit / 254

¿Existen estándares establecidos o mejores prácticas con respecto a esto?

Sé que este es un pequeño detalle, pero creo que logísticamente es importante.

Joshua Enfield
fuente
44
Personalmente, creo que las acciones separadas Crear y Editar es una implementación mucho más limpia (y posiblemente más fácil de mantener).
Adam Lear
1
Un método en el DAL, dos para la API si tiene sentido.
CaffGeek
Bueno, desde mi punto de vista, crear y editar por separado es algo natural para mvc y seguir ese enfoque brinda muchas ventajas de usar el mvc al máximo y ese debería ser el objetivo de todos.
maz3tt

Respuestas:

5

Definitivamente diría que vale la pena separar Crear / Editar, si no fuera por obedecer el principio de responsabilidad única .

Se podría afirmar que hay un mejor SEO al tener la acción correcta en la URL también.

No separar los dos también dificultaría la prueba unitaria del código.

Un nuevo programador que lea el código probablemente no encuentre el código muy intuitivo al tener que crear objetos en un método de "edición", simplemente no tiene sentido semánticamente. Sin embargo, puedo simpatizar con el método Save () en el DAL.

Pensando en ello, realmente no puedo ver los beneficios de ponerlo todo en un método de edición.

nillls
fuente
4

Por lo general, prefiero crear un Savemétodo en el DAL, pero en realidad implementar el Create/ Edit/ por Deleteseparado.

Por ejemplo, mi Savemétodo sería comprobar el estado del objeto, y llame al método Crear / Editar / Borrar dependiendo de lo que se necesita

switch(obj.State)
{
    case ObjectState.New:
        CreateObject(obj);
        break;
    case ObjectState.Modified:
        UpdateObject(obj);
        break;
    case ObjectState.Deleted:
        DeleteObject(obj);
        break;
}

Esto me permite llamar a un método genérico para guardar cualquier objeto, pero aún mantiene la implementación de cada uno (Crear, Editar, Eliminar) separada.

Rachel
fuente
¿Cómo podría decir que es una eliminación?
NoChance
Por lo general, mis objetos tienen una Statepropiedad. Por ejemplo, haciendo clic en el Deletebotón marcaría el objeto como eliminados, a continuación, llamarSaveChanges()
Rachel