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.
fuente
Respuestas:
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.
fuente
Por lo general, prefiero crear un
Save
método en el DAL, pero en realidad implementar elCreate
/Edit
/ porDelete
separado.Por ejemplo, mi
Save
método sería comprobar el estado del objeto, y llame al método Crear / Editar / Borrar dependiendo de lo que se necesitaEsto 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.
fuente
State
propiedad. Por ejemplo, haciendo clic en elDelete
botón marcaría el objeto como eliminados, a continuación, llamarSaveChanges()