Использование mgwt для настольных и мобильных приложений

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

Я ожидаю, что это будет работать следующим образом: я дополню свой существующий проект приложения GWT кодом mgwt (с некоторым разделением логики), что приведет к двум точкам входа. Мой вопрос в том, как управлять этим, учитывая одну html-страницу? Я видел подход, описанный в этой статье и мне было интересно, будет ли это хорошо работать с MGWT или должен быть другой шаблон, который я должен рассмотреть?


person user3127996    schedule 12.04.2014    source источник
comment
Этот вопрос больше подходит для Programers.stackexchange.com. Там вы можете задавать доске подобные вопросы (вещи, которые могут вас интересовать при разработке программы); Stack Exchange больше подходит для вопросов, когда конкретный фрагмент кода не работает должным образом.   -  person logc    schedule 12.04.2014


Ответы (2)


Я не думаю, что вам нужно 2 точки входа. Как сказал Киран выше, вы должны повторно использовать весь код, кроме компонентов представления. Если вы использовали модуль «Действия и места» GWT, компоненты представления должны быть полностью отделены от остального кода.

В этом случае вы можете использовать метод GWT.create, связанный с правильными определениями в определении модуля xml:

// в вашей точке входа:

private IClientFactory clientFactory = GWT.create(IClientFactory.class);

// в определении xml вашего модуля:

 <replace-with class="com.vv.xui.client.DesktopClientFactory">
        <when-type-is class="com.vv.xui.client.IClientFactory" />
        <when-property-is name="formfactor" value="desktop"/>
  </replace-with>
    <replace-with class="com.vv.xui.client.MobileClientFactory">
        <when-type-is class="com.vv.xui.client.IClientFactory" />
        <when-property-is name="formfactor" value="mobile"/>
  </replace-with>

Свойство форм-фактора можно определить, как в этом примере: https://code.google.com/p/gwt-cx/source/browse/trunk/gwtcx/gwtcx-core/gwtcx-core-client./src/main/resources/com/gwtcx/FormFactor.gwt.xml

В вашем IClientFactory у вас будет что-то вроде этого:

public interface IClientFactory {

    IHomeView getHomeView();
    ISearchView getSearchView();
    ...
}

Где IHomeView и ISearchView — это интерфейсы просмотра, реализованные в настольной и мобильной версиях. В моем случае реализации представления представляют собой компоненты UiBinder, которые реализуют связанный интерфейс представления.

В вашем DesktopClientFactory у вас будет что-то вроде этого:

public class DesktopClientFactory implements IClientFactory {

private static final ISearchView searchView = new com.vv.xui.client.view.desktop.SearchView.SearchView();

    @Override
    public ISearchView getSearchView() {
        return searchView;
    }
...
}

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

person vlad_dd    schedule 24.04.2014
comment
Оцените исчерпывающую прогулку по - person user3127996; 04.05.2014

Этот шаблон в ссылке, указывающей на MobileWebApp в googlecode, верен. По сути, у вас есть интерфейсы просмотра пользовательского интерфейса в GWT, которые придерживаются шаблона MVP, рекомендованного в GWT. Затем вы можете выполнять различные реализации представлений пользовательского интерфейса в зависимости от доступных разрешений экрана. Очевидно, вы не хотите, чтобы одинаковая раскладка экрана была на десктопе и мобильном телефоне. Таким образом, вам нужно будет перепроектировать свои представления для разных форм-факторов, а затем вызывать правильные реализации на основе форм-фактора устройства. Поскольку у вас уже есть приложение gwt, вы можете создавать представления для мобильных устройств с помощью mgwt и повторно использовать уже созданный код. Но все же вам придется создавать новые представления для мобильных устройств с помощью mgwt, это не будет прямой заменой.

person kiran    schedule 14.04.2014
comment
Имеет большой смысл. Спасибо Киран - мне удалось добиться прогресса, следуя этой схеме с MGWT. - person user3127996; 04.05.2014