Какая польза от нескольких GWT ActivityManagers и ActivityMappers?

Мне наконец пришло в голову, что вы должны закодировать ActivityMapper для разбора/проверки подкласса Place, передающего его метод getActivity(Place), и вернуть соответствующий Activity для представления пользователю.

Так что это заставило меня задуматься: имеет смысл, что вам нужно много разных Place подклассов в вашем приложении, каждый из которых представляет отдельный URL/состояние для закладок.

Но зачем приложению больше, чем 1 ActivityManager и Activity Mapper? Кажется, что GWT не налагает ограничений на то, какой Place сопоставляется с каким Activity...

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


person Community    schedule 10.11.2012    source источник


Ответы (2)


Написав приложение с 10 такими областями отображения, я могу заверить вас, что это значительно упростило наш проект по сравнению с тем, что было бы с одной (мы могли бы удалить пару областей, а затем обработать без активности, но все же).

Это оказывается наиболее полезным, когда ваши области отображения не меняются одновременно (как правило, ваш основной контент меняется чаще, чем ваш периферийный или отдельно содержимое): допустим, вы редактируете очень сложный объект и разбиваете его на десятки экранов, и на экране всегда есть одно и то же ( например, резюме объекта top, чтобы дать контекст пользователю).

Также здорово специализировать свои действия (разделение задач, по одной проблеме на действие). Например, в stackoverflow (если бы это было приложение GWT) боковая панель справа могла бы находиться в том же действии, что и вопрос и ответы на него, но если вы разделите вещи на отдельные действия, каждое из них становится проще и, следовательно, проще в обслуживании.

Наконец, специализированные виды деятельности легче реорганизовать. Например. мастер-подробности, разделенные на 2 действия, можно легко изменить с «мастер/потомок на одном экране» (так же, как в большинстве почтовых клиентов, которые отображают как список писем, так и выбранное сообщение) на «мастер-потомок и обратно к мастеру». " (как GMail по умолчанию, как и большинство мобильных приложений). И эта реорганизация не связана с изменением способа навигации в вашем приложении, а с повторным использованием одних и тех же действий для разных навигаций в зависимости от форм-фактора (и с MVP вы также можете адаптировать представления без изменения презентаторов).


При этом действительно есть много приложений, где это не нужно/не требуется. Это не значит, что это не полезно.

person Thomas Broyer    schedule 10.11.2012
comment
Я просто не понимаю, как несколько действий могут существовать на одной странице/экране, но делать закладку на один и тот же URL-адрес в адресной строке браузера. Например, если боковая панель справа была другим действием, чем вопрос, это означает, что у вас будет два места, сопоставленных с этими двумя действиями, все по одному и тому же URL-адресу. Как мы можем обновить SidebarActivity, сохранив при этом QuestionActivity прежним, и в то же время изменить URL-адрес (и, таким образом, сделать его закладкой внутри того же состояния)? - person ; 11.11.2012
comment
Places/Activities не требуют обновления истории браузера — каждый отдельный PlaceController/ActivityManager может просто управлять своим собственным состоянием. Подумайте о нескольких открытых окнах браузера одновременно — есть ли одна история, чтобы управлять ими всеми? Точно так же у вас может быть специализированный PlaceHistoryHandler, который считывает каждое место по порядку и каким-то образом соединяет их: page.html#place1:data|otherplace:|somethingoverhere:id123. - person Colin Alworth; 11.11.2012
comment
@orionTurtle Одно место соответствует нескольким действиям. В StackOverflow (если бы это было приложение GWT) QuestionPlace (со свойством id; например, для этого вопроса это будет #QuestionPlace:13326657) сопоставляется с а) вопросом и ответами на него, б) отмеченным разделом на боковой панели, в ) соответствующий раздел на боковой панели. Каждое сопоставление выполняется в разных ActivityMapper, каждое из которых используется отдельным экземпляром ActivityMapper, управляющим различными областями отображения. Я не буду снова ссылаться на свой блог, но действительно читайте его снова, и снова, и снова, пока вам все не станет ясно. - person Thomas Broyer; 11.11.2012
comment
@ColinAlworth: хотя это действительно работает, я бы, однако, сказал, что если вы думаете, что вам нужно что-то подобное, то у вас проблемы с UX и навигацией. Наборы фреймов устарели по уважительным причинам, давайте не будем воскрешать их с помощью JS (минус проблема с закладками). YMMV - person Thomas Broyer; 11.11.2012
comment
Конечно — я пытался набросать пример того, как A/P можно использовать для создания существующих приложений, которым нужна такая идея состояния, а не предположить, что встраивание браузера в браузер было бы хорошей идеей. - person Colin Alworth; 11.11.2012
comment
@orionTurtle, возможно, вам здесь не хватает того, что вы не случайно вводите один и тот же EventBus как в PlaceHistoryHandler вашего приложения, так и во все ваши ActivityManager. Обработчик истории запускает PlaceChangeEvents на шине событий, в которой зарегистрированы все ваши менеджеры действий, чтобы прослушивать и реагировать на изменения места. Вот как одно изменение места влияет на несколько действий и областей экрана. - person Boris Brudnoy; 13.11.2012

Взгляните на статью Томаса Бройера по теме http://blog.ltgt.net/gwt-21-activities-nesting-yagni/

Я попытался реализовать его идею в проекте github: https://github.com/ronanquillevere/GWT-Multi-Activities

person Ronan Quillevere    schedule 28.12.2013