Tengo una aplicación C# MVC que rompo la siguiente manera: Ver -> Controlador -> Servicio -> Repositorio¿Pasa una referencia de servicio a otra mala práctica de capa de servicio?
utilizo la práctica controlador delgada con cada vista de tener un modelo vista única que se devuelve del servicio relevante.
Ejemplo rápida: Vista:/NewAppointment/Paso 1
Su controler se vería así:
public ActionResult Step1()
{
return View(_appointmentService.Step1GetModel());
}
y la capa de servicio de cita se vería así:
public Step1Model Step1GetModel()
{
return new Step1Model();
}
Así
Tengo varias capas de servicio diferentes en uso a través de mi aplicación, cada una implementando una interfaz distinta.
Mi pregunta aparece cuando necesito que una capa de servicio interactúe con otra capa de servicio. En este caso, ¿es una mejor práctica pasar una referencia de interfaz a la llamada de servicio, o debería dejar que el controlador maneje la recopilación de todos los datos y luego volver a pasar los resultados relevantes al servicio?
Ejemplo:
decir que quiero llenar mi vista del modelo con la información del cliente por defecto. Las dos formas que veo de hacer esto son:
pasa una referencia de interfaz de cliente para el servicio de cita, y luego dejar que la llamada de servicio cita el método GetCustomer apropiado en el servicio al cliente ...
En Código:
private ICustomerService _customerService;
private IAppointmentService _appointmentService;
public ActionResult Step1()
{
var viewModel = _appointmentService.Step1GetModel(_customerService);
return View(viewModel);
}
O
Deje que el controlador de manejar la lógica de conseguir que el cliente, a continuación, pasar a ese resultado con el servicio de cita.
En Código:
private ICustomerService _customerService;
private IAppointmentService _appointmentService;
public ActionResult Step1()
{
var customer = _customerService.GetCustomer();
var viewModel = _appointmentService.Step1GetModel(customer);
return View(viewModel);
}
Estoy dividida en cuanto a que sería mejor práctica. El primero mantiene el controlador delgado y fino, pero crea una dependencia entre servicios entre el servicio de citas y el servicio al cliente. El segundo pone más lógica en el controlador, pero mantiene los servicios totalmente independientes.
¿Alguien tiene ideas sobre cuál sería una mejor práctica?
Gracias ~
Valora los comentarios. – TheRightChoyce
whoops, ingrese el error clave. He seguido el principio de los modelos de vista "tontos" ... porque la mayoría de ellos ni siquiera tienen un constructor y nunca tienen ningún método en ellos. Sin embargo, cuando se presentan de esta manera, veo la lógica de agregar constructores en ellos y luego utilizar AutoMapper o similar para captar la información relevante de la capa de dominio. He estado teniendo un debate interno acerca de dónde va todo el mapeo de negocios a dominio, y apegándome a la idea de un modelo de vista tonto y un controlador de cosas que he estado pegándolos en el servicio ... – TheRightChoyce
Esto es exactamente el escenario para el que se creó el Automapper. Me alegro de poder ser de ayuda. – jonnii