Лучший дизайн GWT CodeSplitting для инкапсуляции "модулей"

В настоящее время я столкнулся с довольно сложной проблемой, связанной с кодированием GWT, и надеялся на некоторую помощь.

В настоящее время я работаю над большим унаследованным GWT-приложением (дни до MVP), и я ищу код, разбивающий это приложение на основе модулей, которые "портлеты" (то, что мы называем различными составными виджетами, которые мы создаем нашими страницами вверх с) являются частью.

В настоящее время наши модули только что идентифицируются пакетом, в который попадает портлет, но я открыт для его изменения, чтобы лучше подойти к созданию общей схемы кодирования звука.

Любые идеи о том, как я могу создать этот код, чтобы указать, что портлет/композит принадлежит определенному "модулю", а затем разбить код так, чтобы при первом загрузке любого портлета/составного модуля в модуле X весь модуль X загружен?

Спасибо

Ответ 1

Хм... нормально, это довольно просто, но я думаю, что это не твоя настоящая проблема...

Просто используйте это:

GWT.runAsync(new RunAsyncCallback() {
    public void onFailure(Throwable reason) {
        ...
    }
    public void onSuccess() {
        ...
    }
});

Все внутри метода onSuccess затем будет разделено на другой файл javascript, который затем будет загружен по требованию.

Если вы хотите отделить композиты от остальной части вашего кода, просто поместите создание своего композита внутри этого метода onSuccess.

Вы также можете вложить методы GWT.runAsync, чтобы вы могли разделить деталь снова в разных частях, например. сначала GWT.runAsync загружает модуль X, в конструкторе модуля X вы можете сделать еще один runAsync, который затем загружает ваши композиции.

Из couse могут быть некоторые зависимости между частью, из-за которой сложно скомпилировать компилятор, но я тестировал его с одним из моих проектов (около 40 тыс. строк кода), и он работал как шарм.

Ответ 2

Packagaing имеет мало общего с расщеплением кода, основным фактором, который делает работу по расщеплению кода, является небольшое переплетение спагетти между классами. Если один класс требует другого и т.д., Который в конечном итоге достигает и захватывает все классы, тогда кодовое расщепление не может очень сильно разбить вещи на многие, потому что сам акт требования первого означает, что все требуется. Если вы отделите свои заботы, например, свободную связь, тогда вы сможете иметь то, что хорошо подходит для того, чтобы быть расщепляемым.

Ответ 3

Как насчет использования GWTP - это хорошая структура MVP, и они предоставляют вам автоматическое разделение кода. Вам нужно будет реорганизовать свою базу кода, чтобы использовать презентатор/представление для каждого из модулей, которые вы хотите разбить. Затем добавление кодов просто так же, как добавление следующих строк вашему докладчику:

@ProxyCodeSplit
@NameToken("firstpage")
public interface MyProxy extends ProxyPlace<FirstPagePresenter> {}

GWTP также имеет плагин Eclipse, который генерирует большую часть кода шаблона.