Сообщение Re: MVP и MDI от 28.05.2016 14:06
Изменено 28.05.2016 14:14 Qulac
Здравствуйте, AlexNek, Вы писали:
AN>MVP с одним окошком проблем не вызывает.
AN>А вот с двумя никак не придумаю, как лучше.
AN>Проблема в том, что для вставки документа нужно иметь "указатель" на документ.
AN>А ни интерфейсу вьюва ни презентеру "не положено знать" об используемой технологии GUI. Ну типа того — сегодня винформс, завтра впф.
Значит нужен кто-то третий, кто все это будет знать.
AN>Пока приходится всё в форме делать.
AN>...
AN>Хотя пожалуй, только что придумал, что скажете?
AN>Главная форма говорит своему презентеру "создай новое окошко".
AN>Презентер "говорит" интерфейсу вьюва "создай новое окошко", а в ответ получает презентер нового окошка.
Если все просто, то вполне подходящее решение. Я вообще в mvp и mvvm использую такой подход: есть служебный класс который занимается создание форм и связыванием со все остальным, его можно так же связать с ioc-контейнером. Вот примерный код:
Просто, минимум когда, можно допелить под любые потребности.
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 TView _view;
private TModel _model;
public PresenterBase()
{
_view= WindowService.Show<PresenterBase,IView>();
_model=new Model();
}
}
Просто, минимум когда, можно допелить под любые потребности.

Здравствуйте, AlexNek, Вы писали:
AN>MVP с одним окошком проблем не вызывает.
AN>А вот с двумя никак не придумаю, как лучше.
AN>Проблема в том, что для вставки документа нужно иметь "указатель" на документ.
AN>А ни интерфейсу вьюва ни презентеру "не положено знать" об используемой технологии GUI. Ну типа того — сегодня винформс, завтра впф.
Значит нужен кто-то третий, кто все это будет знать.
AN>Пока приходится всё в форме делать.
AN>...
AN>Хотя пожалуй, только что придумал, что скажете?
AN>Главная форма говорит своему презентеру "создай новое окошко".
AN>Презентер "говорит" интерфейсу вьюва "создай новое окошко", а в ответ получает презентер нового окошка.
Если все просто, то вполне подходящее решение. Я вообще в mvp и mvvm использую такой подход: есть служебный класс который занимается создание форм и связыванием со все остальным, его можно так же связать с ioc-контейнером. Вот примерный код:
Просто, минимум когда, можно допелить под любые потребности.
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();
}
}
Просто, минимум когда, можно допелить под любые потребности.
