эта структура модулей 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
Диаграмма последовательности
PersonUI вызовет методы GWTPersonService, которые вызывают PersonService(мне нужно это разделение потому что PersonService.java также будет вызываться клиентами, не являющимися GWT).
PersonService вызовет PersonDAO, который использует и возвращает экземпляры PersonBean. Затем PersonBean преобразуется в GWTPersonDTO и отправляется клиенту с помощью GWTPersonServiceImpl.
Вопросы (отредактировано)
- в какой проект я должен поместить общий GWT-код, который обычно находится в папке /shared?
- имеет ли смысл иметь GWTPersonServiceImpl?java и GWTPersonService.Ява в городе доменный проект? Моя причина заключается в том, что поскольку все сервлеты живут на сервере, а домен предназначен для серверной части, то эти классы должны быть в проекте домена.
- должен ли я двигаться GWTUtility.java внутри доменного проекта?
- имеет ли смысл использовать DTO? Есть ли способ сделать его более прямым: то есть использовать непосредственно PersonBean?
- можно ли запустить этот сценарий в режиме разработчика GWT с помощью maven? Насколько легко его настроить?
- Если у вас есть какие-либо изменения / дополнения к приведенному выше сценарию, пожалуйста, опубликуйте их - или даже лучше, если вы уже сделали приложение, которое поможет вам узнать, как вы решили это разделение.
Спасибо!
2 ответа:
- я бы поместил общий код в третий проект, от которого могут зависеть домен и WebApp.
- поскольку
GWTPersonServiceImpl
является сервлетом и работает на сервере, а не на клиенте,он принадлежит домену.- какую функцию выполняет
GWTUtility
? Если он используется только на клиенте, он принадлежит веб-приложению; если он используется только на сервере, то он принадлежит домену; если он используется на обоих, то он, вероятно, принадлежит третьему проекту, от которого зависят и веб-приложение, и домен.- Вы можете использовать комплекс тип до тех пор, пока он (и его составные типы) реализует один из следующих типов:
com.google.gwt.user.client.rpc.IsSerializable
или (с ограничениями)java.io.Serializable
. Смотритеруководство по разработке GWT для получения подробной информации . В любом случае, как и было задумано, любой сериализованный тип в вашем проекте, вероятно, принадлежит модулю, от которого зависят домен и веб-приложение.- Да.
мне это удается следующим образом:
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