MVP - Presenter и Service Layer - Где объявить Service Layer - PullRequest
3 голосов
/ 27 марта 2011

Я читаю Архитектура Microsoft .Net Solutions for Enterprise и пытаюсь разобраться с вещами, касающимися докладчика и уровня обслуживания.

Прежде всего, мойPresenter должен вызывать методы, которые находятся на уровне службы, такие как initialize (), save () и т. Д. Но где я могу разместить ссылку на уровень службы?Должно ли оно быть на уровне класса в Presenter, или я должен определить новый сервис в самих методах Presenter?

Во-вторых - это не совсем понятно в книге - это как обработка из Presenterна Сервисном Уровне работает?:

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 Ответ

2 голосов
/ 27 марта 2011
 IPredictionService predictionService = new PredictionService();

Это будет зависеть от множества факторов:

  • Срок службы службы и срок службы докладчика
  • Если вы используете какой-либо инструмент DI
  • Если служба должна быть удалена
  • Если служба имеет какое-либо время простоя (например, если это WCF-прокси )

По сути, это не обязательно архитектурный дизайн - это скорее решение проекта.

Если вы используете инструмент DI, вы бы либо:

 IPredictionService predictionService = diContainer.Resolve<IPredictionService>();

Или даже лучше , ничего из вышеперечисленного и просто объявить его как свойство, и инструмент DI может заполнить его при создании презентатора.

...