эта структура модулей GWT в порядке?


Описание

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

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

  • / родитель
  • /родитель/пом.xml

Доменный проект

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

  • / Родитель / Домен
  • /Parent / Domain / pom.xml
  • .../ бобы / PersonBean.java
  • .../ Дао / Персондао.java
  • .../ услуги / Персонсервис.java
  • .../ util / DateUtil.java
  • .../gwt / клиент / GWTPersonService.java
  • .../gwt / server/GWTPersonServiceImpl.java
  • .../gwt / shared/GWTPersonDTO.java -- A DTO (объект передачи данных)

Проект WebApp

[2] я думаю об этом как о клиентской стороне приложения, которое работает в веб-браузере.

  • Parent / WebApp
  • Parent / WebApp/pom.xml
  • .../gwt / клиент / PersonUI.java
  • .../gwt / util/GWTUtility.java-это служебный класс, вызываемый компонентами GWT, он не используется на сервере
  • .../веб-приложения/веб-инф/веб.xml
  • .../ webapp / страница.css
  • .../ webapp / страница.html

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

текст Alt

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

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

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

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

Спасибо!

2 2

2 ответа:

  1. я бы поместил общий код в третий проект, от которого могут зависеть домен и WebApp.
  2. поскольку GWTPersonServiceImpl является сервлетом и работает на сервере, а не на клиенте,он принадлежит домену.
  3. какую функцию выполняет GWTUtility? Если он используется только на клиенте, он принадлежит веб-приложению; если он используется только на сервере, то он принадлежит домену; если он используется на обоих, то он, вероятно, принадлежит третьему проекту, от которого зависят и веб-приложение, и домен.
  4. Вы можете использовать комплекс тип до тех пор, пока он (и его составные типы) реализует один из следующих типов:com.google.gwt.user.client.rpc.IsSerializable или (с ограничениями) java.io.Serializable. Смотритеруководство по разработке GWT для получения подробной информации . В любом случае, как и было задумано, любой сериализованный тип в вашем проекте, вероятно, принадлежит модулю, от которого зависят домен и веб-приложение.
  5. Да.

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

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