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 может заполнить его при создании презентатора.

Другие вопросы по тегам