Информация об изменениях

Сообщение Re: MVP и MDI от 28.05.2016 14:06

Изменено 28.05.2016 15:54 Qulac

Здравствуйте, AlexNek, Вы писали:

AN>MVP с одним окошком проблем не вызывает.

AN>А вот с двумя никак не придумаю, как лучше.
AN>Проблема в том, что для вставки документа нужно иметь "указатель" на документ.
AN>А ни интерфейсу вьюва ни презентеру "не положено знать" об используемой технологии GUI. Ну типа того — сегодня винформс, завтра впф.

Значит нужен кто-то третий, кто все это будет знать.

AN>Пока приходится всё в форме делать.

AN>...
AN>Хотя пожалуй, только что придумал, что скажете?

AN>Главная форма говорит своему презентеру "создай новое окошко".

AN>Презентер "говорит" интерфейсу вьюва "создай новое окошко", а в ответ получает презентер нового окошка.

Если все просто, то вполне подходящее решение. Я вообще в mvp и mvvm использую такой подход: есть служебный класс который занимается создание форм и связыванием со все остальным, его можно так же связать с ioc-контейнером. Вот примерный код:

public static class WindowService
 {
   //регистрируем форму, модель. Вызывается в начале метода Main для каждого класса формы
   public static void Register<TView,TPresenter>(TView view,Tpresenter presenter)
   {
   }
   // отображает форму и возвращает ее объект.
   public statiс TView Show<TPresenter,TView>(){}
 }

  public class PresenterBase
  {
   private IView _view;
   private Model _model;
   
   public PresenterBase()
   {
    _view= WindowService.Show<PresenterBase,IView>();
    _model=new Model();
   }
  }


Просто, минимум когда, можно допелить под любые потребности.
Re: MVP и MDI
Здравствуйте, AlexNek, Вы писали:

AN>MVP с одним окошком проблем не вызывает.

AN>А вот с двумя никак не придумаю, как лучше.
AN>Проблема в том, что для вставки документа нужно иметь "указатель" на документ.
AN>А ни интерфейсу вьюва ни презентеру "не положено знать" об используемой технологии GUI. Ну типа того — сегодня винформс, завтра впф.

Значит нужен кто-то третий, кто все это будет знать.

AN>Пока приходится всё в форме делать.

AN>...
AN>Хотя пожалуй, только что придумал, что скажете?

AN>Главная форма говорит своему презентеру "создай новое окошко".

AN>Презентер "говорит" интерфейсу вьюва "создай новое окошко", а в ответ получает презентер нового окошка.

Если все просто, то вполне подходящее решение. Я вообще в mvp и mvvm использую такой подход: есть служебный класс который занимается создание форм и связыванием со все остальным, его можно так же связать с ioc-контейнером. Вот примерный код:

public static class WindowService
 {
   //регистрируем тип формы и презентера. Вызывается в начале метода Main для каждого класса формы
   public static void Register<TView,TPresenter>()
   {
   }
   // отображает форму и возвращает ее объект.
   public statiс TView Show<TPresenter,TView>(){}
 }

  public class PresenterBase
  {
   private IView _view;
   private Model _model;
   
   public PresenterBase()
   {
    _view= WindowService.Show<PresenterBase,IView>();
    _model=new Model();
   }
  }


Просто, минимум когда, можно допелить под любые потребности.