MVP - Presenter и Service Layer - Где объявить Service Layer
Я читаю " Архитектурные решения Microsoft .Net для предприятия" и пытаюсь разобраться с презентацией и уровнем обслуживания.
Прежде всего, мой Presenter должен вызывать методы, которые находятся на уровне службы, такие как initialize(), save() и т. Д. Но где я могу разместить ссылку на уровень службы? Должно ли оно быть на уровне класса в Presenter, или я должен определить новый сервис в самих методах Presenter?
Во-вторых, это не совсем понятно в книге - так ли работает обработка от Presenter до Service Layer?:
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);
}
1 ответ
IPredictionService predictionService = new PredictionService();
Это действительно будет зависеть от многих факторов:
- Срок службы сервиса и время жизни докладчика
- Если вы используете какой-либо инструмент DI
- Если сервис должен быть утилизирован
- Если служба имеет какое-либо время ожидания (например, если это прокси WCF)
Таким образом, по сути, это не обязательно архитектурный дизайн - это скорее дизайнерское решение.
Если вы используете инструмент DI, вы должны:
IPredictionService predictionService = diContainer.Resolve<IPredictionService>();
Или, что еще лучше, ничего из вышеперечисленного и просто объявить его как свойство и инструмент DI может заполнить его при создании презентатора.