Последнее время мое внимание привлекала технология для разработки RIA – GWT. И как это обычно бывает в каждом подходе и технологии есть свои достоинства и недостатки, и GWT не исключение. Но описание достоинств и недостатков этой технологии гораздо шире и объемнее того, что я хотел бы написать в данном посте. Я хочу сосредоточиться на использовании и о небольших правках, сделанных мной для реализации паттерна MVP – опен-сорс проекта Mvp4g.
Все , что нужно для начало работы с этой реализацией вы можете получить на страницах проекта.
При использовании этого фреймворка у меня возникла необходимость в обеспечении модулярности и возможности указания альтернативного конфигурационного файла.
Модулярность – под модулярностью понимается возможность указания дополнительного конфигурационного файла, который так же будет содержать декларации views, presenters, services и events, относящихся только к этому модулю. Так же при использовании GWT 2.x и указании аттрибута async активация данного подуля будет обвернута в RunAsyncCallback вызов, что в свою очередь обеспечит разделение вашего приложения на несколько отдельных частей и загрузка каждой части будет происходить только в случае необходимости. В целом же конфигурационный файл приложения, поддерживающего модульность не отличается от стандартного, за исключением следующего момента:
<module source="modules/module.xml" event="activationEvent" async="true"/>Где source – указывает на файл конфигурации модуля, event – говорит на какое событие модуль будет активирован и async – указывает будет ли активация модуля обворачиваться в RunAsyncCallback вызов.
Еще одной доработкой является возможность указания дополнительного конфигурационного файла. Данная функциональность может пригодиться в таких случаях как, например, у вас есть админка, которая тоже построена на GWT, но вы не хотите фунционал админки с фронтендом мешать в одну кучу. Что же нужно для этого? Для этого нужно наследовать интерфейс com.mvp4g.client.Mvp4gStarter и аннотровать свой интерфейс с помошью аннотации com.mvp4g.client.Configuration, указав в качестве значения путь к альтернативному конфигурационному файлу. Затем в entry point классе создать имплементацию интерфейса с помощью GWT.create().
Пример интерфейса:
@Configuration("mvp4g-alt-conf.xml") public interface CustomMvp4Starter extends Mvp4gStarter {}
Пример кода в entry point классе:
public class TestMvp4gEntryPoint implements EntryPoint { private Mvp4gStarter entry; public void onModuleLoad() { entry = GWT.create(CustomMvp4Starter.class); entry.start(); } }
На этом все, скачать правки можно тут.