MVP в окнах форм - PullRequest
       22

MVP в окнах форм

0 голосов
/ 29 мая 2019

Я хочу реализовать шаблон MVPO в моем приложении Windows Forms. Как вы знаете, 1: 1 означает, что для одного просмотра есть один докладчик.

Итак, в принципе мы можем иметь:

public class MainPresenter
{
       IMainView _mainView;
       public MainPresenter(IMainView mainView)
       {
             _myView = myView;
       }
}

Мой вопрос: может ли один докладчик использовать другого докладчика, например:

public class MainPresenter
{
       IMainView _mainView;
       ISomeOtherPresenter _otherPresenter;
       public MainPresenter(IMainView mainView, IOtherPresenter otherPresenter)
       {
             _mainView = myView;
             _otherPresenter = otherPresenter;
       }
}

В качестве справки я прошел видеоурок Роберта Маркеса. В 10 видео серии на 10-м он использовал один rpesenter внутри другого

Ссылочная ссылка

на 35:39 вы увидите, что его MainPresenter зависит от IHelpAboutPresenter.

Для меня это логично, потому что если HelpAboutView (форма) может быть открыта с помощью кнопки из MainView, то логично MainPresenter должен иметь доступ к HelpAboutPresenter, который был представлен на видео. Если не так, как это сделать, потому что все люди говорят 1:1, и здесь у нас есть 1 presenter uses other presenter.

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Я бы сказал, что в этом подходе нет ничего неправильного , хотя, возможно, можно пойти другим путем.

«Основной» вид может действовать больше по принципу фронт-контроллера . Шаблон чаще ассоциируется с веб-приложениями, хотя он все еще может быть применим к настольным приложениям. Например, основным представлением MDI может быть фронт-контроллер .

Обычно фронт-контроллер имеет некоторый механизм диспетчеризации, чтобы отдельные запросы (такие как щелчки меню в настольном приложении или ресурсы на основе URL-адреса в веб-приложении) обрабатывались определенным обработчиком запросов. Таким образом, существует небольшая косвенность, которая отделяет фронт-контроллер от конкретной реализации.

В случае связанного видео связь немного более связана с тем, что запрос окна About (если я правильно понимаю) обрабатывается не конкретным обработчиком запросов, а фронт-контроллером.

Что делает это странным, так это тот факт, что фронт-контроллер реализован с использованием шаблона MVP.

0 голосов
/ 29 мая 2019

Это небольшой код, имеющий такую ​​взаимную зависимость. Если вам нужна функциональность другого докладчика, скорее всего, у докладчиков есть что-то общее. Так что, возможно, они должны происходить из одного базового класса. Тогда они могут легко обмениваться логикой, не усложняя ваш граф зависимостей.

public class BasePresenter
{
    protected void SharedMethod()
    {
        //Code that you need to call from both presenters
    }
}

public class MainPresenter : BasePresenter
{
    IMyView _myView;

    public MainPresenter(IMyView myView)
    {
        _myView = myView;
    }

    private Foo()
    {
        SharedFunction();
    }
}

public class OtherPresenter : BasePresenter
{

    public OtherPresenter(IMyView myView) : base()
    {
        _myView = myView;
    }

    private Bar()
    {
        SharedMethod();
    }
}
...