это структура модулей GWT хорошо? - PullRequest
2 голосов
/ 18 января 2011

Описание

У меня есть проект Parent GWT, использующий плагин gwt-maven-plugin. Этот проект разделен на 2 подпроекта: Domain и WebApp, и каждый проект содержит файлы pom.xml. Я хотел бы отделить код домена от кода клиента GWT.

Родительский проект

  • / Родитель
  • / Родитель / pom.xml

Домен проекта

[1] Я думаю об этом как о серверной части приложения, которое работает на сервере

  • / Родитель / Домен
  • / Родитель / домен / pom.xml
  • ... / бобы / PersonBean.java
  • ... / dao / PersonDAO.java
  • ... / услуги / PersonService.java
  • ... / Util / DateUtil.java
  • ... / GWT / клиент / GWTPersonService.java
  • ... / GWT / сервер / GWTPersonServiceImpl.java
  • ... / gwt / shared / GWTPersonDTO.java - DTO (объект передачи данных)

Проект WebApp

[2] Я считаю его клиентской частью приложения, которое запускается в веб-браузере.

  • Родитель / WebApp
  • Родитель / WebApp / pom.xml
  • ... / GWT / клиент / PersonUI.java
  • ... / gwt / util / GWTUtility.java - это служебный класс, вызываемый компонентами GWT, он не используется на сервере
  • ... / WebApp / WEB-INF / web.xml
  • ... / WebApp / Page.css
  • ... / WebApp / page.html

Диаграмма последовательности

alt text

PersonUI будет вызывать методы GWTPersonService, которые вызывают PersonService (мне нужно это разделение, потому что PersonService.java также будет вызываться не-GWT-клиентами).

PersonService вызовет PersonDAO, который использует и возвращает экземпляры PersonBean. Затем PersonBean преобразуется в GWTPersonDTO и отправляется клиенту с помощью GWTPersonServiceImpl.

Вопросы (отредактировано)

  1. В каком проекте я должен поместить общий код GWT, который обычно находится в папке / shared?
  2. Имеет ли смысл иметь GWTPersonServiceImpl.java и GWTPersonService.java в проекте домена? Моя причина в том, что, поскольку все сервлеты живут на сервере, а домен предназначен для серверной части, эти классы должны быть в проекте Domain.
  3. Должен ли я переместить GWTUtility.java внутри проекта домена?
  4. Имеет ли смысл использовать DTO? Есть ли способ сделать его более понятным: то есть использовать непосредственно PersonBean?
  5. Возможно ли запустить этот сценарий в режиме разработчика GWT с помощью maven? Насколько легко это настроить?
  6. Если у вас есть какие-либо изменения / дополнения в вышеприведенном сценарии, пожалуйста, опубликуйте их - или даже лучше, если вы уже сделали приложение, это очень поможет узнать, как вы справились с этим разделением.

Спасибо!

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Я управляю этим следующим образом:

Commons
    CmnDomain [Java Project]
        src/java/com/cmnapp/CmnDomain.gwt.xml // specifying "domain" as source
        src/java/com/cmnapp/domain //  POJO's used in GWT application
        src/java/com/cmnapp/iBatis //  iBatis implementation (you can have ur DAO impl. here)
        src/java/com/myapp/service //  Common Spring service
MyApp
    MyAppService [Java Project]
        src/java/com/mynapp/MyAppDomain.gwt.xml  //  specifying "domain" as source
        src/java/com/mynapp/domain //  POJO's used in GWT application
        src/java/com/mynapp/iBatis //  iBatis implementation (you can have ur DAO impl. here)
        src/java/com/myapp/service //  Spring service
    MyAppWeb [Gwt Web Project]
        src/java/com/mynapp/MyApp.gwt.xml  //  specifying "client" and "shared" as source folders
        src/java/com/myapp/client  //  Pure GWT code can be excluded from .jar of this project
        src/java/com/myapp/shared  //  Shared between UI and Presentation tiers e.g. constants
        src/java/com/myapp/server  //  RPC servlet, Standard servlet, struts action, etc.
        src/webapp/WEB-INF/web.xml
        src/webapp/images //  images
        src/webapp/javascript //  custom java scripts
        src/webapp/css //  cascade style sheets
        src/webapp/WEB-INF/jspx //  internal access only
        src/webapp/secure  //  content accessible post user login
        src/webapp/login   //  content accessible with/without login
1 голос
/ 19 января 2011
  1. Я бы поместил общий код в третий проект, от которого могут зависеть и домен, и WebApp.
  2. Поскольку GWTPersonServiceImpl является сервлетом и работает на сервере, а не на клиенте, он принадлежит домену.
  3. Какую функцию выполняет GWTUtility? Если он используется только на клиенте, он принадлежит WebApp; если он используется только на сервере, то он принадлежит домену; если он используется в обоих случаях, он, вероятно, принадлежит к третьему проекту, от которого зависят и WebApp, и Domain.
  4. Вы можете использовать сложный тип, если он (и его составляющие типы) реализует либо com.google.gwt.user.client.rpc.IsSerializable, либо (с ограничениями) java.io.Serializable. Подробнее см. Руководство по разработке GWT . В любом случае, как и планировалось, любой сериализованный тип в вашем проекте, вероятно, принадлежит модулю, от которого зависят как Domain, так и WebApp.
  5. Да.
...