MVP - Presentador y la capa de servicio - Dónde declarar la capa de servicio
-
12-11-2019 - |
Pregunta
Estoy leyendo a través de Soluciones de Arquitecto Microsoft .NET para la empresa e intento de imaginar un par de cosas relativas al presentador y la capa de servicio.
En primer lugar, mi presentador necesita llamar métodos que residen en la capa de servicio, como inicializar (), guardar (), etc. ¡Pero, ¿a dónde coloco una referencia a la capa de servicio?¿Debería ser a nivel de clase en el presentador, o si debo definir un nuevo servicio en el propio métodos del presentador?
segundo: esto tampoco está realmente claro en el libro, ¿es así de cómo funciona el procesamiento del presentador a la capa de servicio?:
public void ProcessPrediction()
{
//Get the data from the View
string selectedForPolePosition = predictionPageView.DriverPolePosition;
string selectedForSecondPosition = predictionPageView.DriverSecondPosition;
string selectedForThirdPosition = predictionPageView.DriverThirdPosition;
string selectedForFourthPosition = predictionPageView.DriverFourthPosition;
string selectedForFifthPosition = predictionPageView.DriverFifthPosition;
string raceTitle = predictionPageView.RaceTitle;
//Prepare for sending to the Service Layer
PredictionDTO prediction = new PredictionDTO();
prediction.RaceTitle = raceTitle;
//More Filling of the DTO here....
//...
//...
IPredictionService predictionService = new PredictionService();
predictionService.ProcessPrediction(prediction);
}
Solución
IPredictionService predictionService = new PredictionService();
Esto dependerá realmente de muchos factores:
- vida útil del servicio y vida útil del presentador
- Si está utilizando alguna herramienta DI
- si el servicio necesita ser eliminado
- Si el servicio tiene algún tiempo de espera inactivo (por ejemplo, si es un proxy WCF )
En esencia, no es necesariamente un diseño arquitectónico, es más de decisión de diseño.
Si usa una herramienta DI, usted:
IPredictionService predictionService = diContainer.Resolve<IPredictionService>();
o incluso mejor , nada de lo anterior y simplemente lo declara como propiedad y una herramienta DI puede rellenarlo cuando crea el presentador.