这个GWT模块结构好吗?

时间:2011-01-18 20:14:28

标签: maven-2 gwt dto gwt-rpc

描述

我有一个使用gwt-maven-plugin的Parent GWT项目。该项目分为2个子项目:Domain和WebApp,每个项目包含pom.xml文件。我想从GWT客户端代码中拆分域代码。

父项目

  • /父
  • /Parent/pom.xml

域项目

[1]我认为它是服务器上运行的应用程序的服务器端部分

  • /父/领域
  • /Parent/Domain/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]我认为它是在Web浏览器中运行的应用程序的客户端。

  • 父/ Web应用程序
  • 父/ Web应用程序/ pom.xml的
  • ... / GWT /客户端/ PersonUI.java
  • ... / gwt / util / GWTUtility.java - 这是一个由GWT组件调用的实用程序类,它不在服务器上使用
  • ... / web应用/ WEB-INF / web.xml中
  • ... / web应用/ Page.css
  • ... / web应用/ page.html中

序列图

alt text

PersonUI将调用GWTPersonService调用PersonService的方法(我需要这种分离,因为PersonService.java也将被非GWT客户端调用)。

PersonService将调用使用并返回PersonBean实例的PersonDAO。然后,PersonBean转换为GWTPersonDTO并由GWTPersonServiceImpl发送给客户端。

问题(已编辑)

  1. 我应该在哪个项目中放置通常位于/ shared文件夹下的共享GWT代码?
  2. 在域项目中使用GWTPersonServiceImpl.java和GWTPersonService.java是否有意义?我的理由是,由于所有servlet都存在于服务器上,而域是服务器端,因此这些类应该在Domain项目中。
  3. 我应该在Domain项目中移动GWTUtility.java吗?
  4. 使用DTO是否有意义?有没有办法让它更直接:即直接使用PersonBean?
  5. 是否可以使用maven在GWT Developer模式下运行此场景?配置有多容易?
  6. 如果你对上述场景有任何修改/补充,请发布它们 - 如果你已经完成了一个应用程序,那就更好了解你如何解决这个问题。
  7. 谢谢!

2 个答案:

答案 0 :(得分:1)

  1. 我会将共享代码放在Domain和WebApp都可以依赖的第三个项目中。
  2. 由于GWTPersonServiceImpl是一个servlet并且在服务器而不是客户端上运行,因此它属于域。
  3. GWTUtility执行什么功能?如果它仅在客户端上使用,则它属于WebApp;如果它只在服务器上使用,那么它属于Domain;如果它在两者上使用,那么它可能属于WebApp和Domain都依赖的第三个项目。
  4. 您可以使用复杂类型,只要它(及其组成类型)实现com.google.gwt.user.client.rpc.IsSerializable或(有限制)java.io.Serializable。请参阅GWT development guide for details。无论如何,按照设计,项目中的任何序列化类型可能都属于Domain和WebApp所依赖的模块。

答案 1 :(得分:1)

我按如下方式管理:

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