GWT Model View Presenter, повторно использовать докладчиков? Или ведущий - ведущий связи
Новичок здесь.
Я только начал с выступления Рэя Райана в Google IO и следил за некоторыми статьями на сайте разработчиков Google. Я не использовал никаких дополнений GWT, таких как GWTP или MVP4G или GIN, или каких-либо других вещей. Просто последовал примеру контактов на сайте GWT и попытался смоделировать мой случай.
У меня есть панель DockLayout, у которой есть заголовок, дерево навигации слева и центральная главная панель. Все это у меня есть в одном DefaultView, который реализует DefaultPresenter.
Теперь у меня есть DialogBox, который появляется, когда пользователь что-то делает в дереве, и это моделируется в DialogView и DialogPresenter соответственно.
Теперь, когда я скрываю DialogBox, я заканчиваю тем, что вызываю новый экземпляр DefaultPresenter из AppController, который в силу этого создает новый DefaultView, и все мои выборки дерева и другие изменения в главной центральной панели исчезают.
- Можно ли повторно использовать экземпляры докладчиков, не создавая новый при изменении истории? (например, DefaultPresenter в моем случае)
- Есть ли способ в шаблоне MVP передавать элементы управления между докладчиками с сохранением значений?
- Как загрузить существующий экземпляр презентатора в контроллере приложения при пожаре?
Или я неправильно понял всю архитектуру MVP? Теперь я планирую иметь разных презентаторов и представлений для каждого из моих компонентов, например HeaderPresenter / HeaderView, TreePresenter / TreeView, MainContentPresenter / MainContentView? Так что я буду создавать только новые экземпляры презентаторов, которые мне нужны (например, MainContentPresenter), и сохранять существующие как есть (как TreePresenter и HeaderPresenter) Решает ли это мою проблему? Как бы я сшил все эти разные виды в окне браузера? Я не использую UiBInder, просто придерживаюсь основ.
Помогите мне все вы, эксперты, я в тупике!
1 ответ
Когда я прочитал ваш вопрос, мне показалось, что ответом должна стать статья, похожая на Stateful Presenter Architecture для GWT-приложений. Это Stackru, однако, все о краткости, поэтому давайте посмотрим:
ответы
1.
Можно ли повторно использовать экземпляры докладчиков, не создавая новый при изменении истории?
Определенно. Ничто не мешает вам переключаться между кучей одиночных докладчиков, добавленных в ваши представления (переключение произойдет в вашей реализации ActivityMapper). Обратите внимание на предположение отныне, что ваши докладчики - это Действия.
2.
Есть ли способ в шаблоне MVP передавать элементы управления между докладчиками с сохранением значений?
Поскольку ваши докладчики теперь являются одиночками, они сохранят состояние своих переменных-членов. Для обмена сообщениями между докладчиками, события и EventBus ваши друзья.
3.
Как загрузить существующий экземпляр презентатора в контроллере приложения при пожаре?
Ваш ActivityMapper
экземпляр, после регистрации в вашем ActivityManager, должен быть достаточным. ActivityManager
будет опираться на вашу реализацию public Activity getActivity(Place place)
из ActivityMapper
интерфейс для возврата одного из ваших синглтон-презентаторов.
Ресурсы
Сеанс Дэвида Чандлера (GWT) в Google I/O 2011 затрагивает именно этот тип архитектуры master/details. Я настоятельно рекомендую его в целом, и в отношении этого вопроса, в частности, ту часть, которая следует после 18-й минуты, когда Дэвид начинает подробный обзор мероприятий и мест.