2011-05-17 156 views
0

现在在我们的项目中,我们有下面提到的结构。我们的项目主要使用GWT & Spring框架。GWT项目结构

  1. com.customername.projectname.client.module名
  2. com.customername.projectname.client.rpc.module名
  3. com.customername.projectname.shared.validator.module名
  4. COM .customername.projectname.server.module名
  5. com.customername.projectname.spring.dao.module名
  6. com.customername.projectname.spring.service.module名

我们的application.gwt.xml包含以下条目,需要将其转换为java脚本。

source path='client' 
source path='shared' 

由于我们使用的弹簧在服务器端,我们使用的是弹簧标注来标记的服务和DAO,然后在applicationContext.xml我们用下面的配置扫描DAO和服务层。

<context:annotation-config/>  
<context:component-scan base-package> 

现在我们的客户想要使用下面提到的结构。按模块分组所有内容。在我们的情况下,模块也不是GWT模块。它就像差异。部分应用程序。

  1. com.customername.projectname.modulename.client
  2. com.customername.projectname.modulename.rpc
  3. com.customername.projectname.Modulename.validator
  4. com.customername.projectname.Modulename。服务器
  5. com.customername.projectname.Modulename.spring.dao
  6. com.customername.projectname.Modulename.spring.Service

我的问题是:

  1. 是建议上的做法考虑到它是非常大的应用程序?
  2. 如果要实现上述方法,如何设置需要由gwt编译器从java转换为java脚本的包/源文件。我应该在application.gwt.xml中提到每个模块名称吗?

回答

0

问题1)我同意edwardTheGreat,您的初始包装结构听起来非常合理。您只需在gwt.xml文件中列出客户端和共享包(需要编译为javascript的包)。

问题2)如果你确实改变了包的结构,就像你刚才提到的那样,你将不得不在你的gwt.xml文件中列出每个模块的客户和共享目录。正如丹尼尔所说,你可以将每个模块分解成它自己的“GWT模块”,然后在每个应用模块中继承你需要的GWT模块。

为了达到这个目的,你必须使每个继承的GWT模块的源代码可用于继承模块。无论你是通过Maven,Ant等来做到这一点,都无关紧要。但是顶级GWT模块必须具有编译时访问所有继承的GWT模块的源代码的权限。例如:

<module rename-to='A'> 
    <inherits name='org.example.B' /> 
    ... other inherits, entry-point, etc. ... 
    <source path='client' /> 
    <source path='shared' /> 
</module> 

通过这种结构,模块'A'必须有权访问模块'B'的源。模块'B'可以像通常的GWT模块一样构建,但是在编译时,模块'A'必须在类路径上有B的源代码。

0

要回答第二个问题,您应该为每个模块指定一个.gwt.xml文件,指出该模块中的客户端(和共享)目录。对于使用其他GWT模块的GWT模块,您应该使用.gwt.xml文件中的“inherit”来引用它们。

本页面描述一些概念相当不错: http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html

+0

假设我们采用“继承”的解决方案,那么需要先编译其他模块,因为当我尝试这样做时,就是说没有找到该模块的源代码。 – 2011-05-17 06:15:29

+0

不,你只需要编译具有入口点的项目。它会继承它需要的模块,然后根据需要继承其他模块。我遇到的一个问题是,当我将依赖关系打包为单独的jar文件时,这些jar文件需要包含java源文件,以便GWT编译器可以编译javascript代码。但是,如果您在同一个项目中拥有所有内容,则会自动发生。 – 2011-05-18 14:02:00

+0

谢谢丹尼尔。你是对的。 – 2011-05-19 13:20:06

0

问题1) 如果对你有意义的,这听起来像一个相当不错的项目结构其他开发商。(来自Here两者)​​

你应该捆绑这些类和 接口的封装,几个 原因,其中包括:

  • 你和其他程序员可以很容易地确定这些类型 有关。
  • 你和其他程序员知道在哪里可以找到可以提供 图形相关功能的类型。
  • 您的类型的名称不会与其他 程序包中的类型名称冲突,因为程序包会创建一个新的名称空间 。
  • 您可以允许包中的类型相互无限制地访问 ,但仍然限制包的外部类型的访问 。

问题2) 让我澄清一下,在问候:

我应该提到在application.gwt.xml每个模块的名字吗?

你的意思是包是否正确?

... 

    <entry-point class='com.customername.projectname.AppEntryPoint'/> 

    <source path="modulename.client"/> 
    <source path="modulename.anotherpackage"/> 

</module> 

任何包中的GWT模块(不同于.gwt.xml是在包开始),应在.gwt.xml引用如果是由GWT编译器中,引用的包的任何子包被编译将由GWT编译器自动编译。

不确定你的问题是关于Spring配置。

希望有所帮助。

+0

这有帮助,但然后让我们说我有1000个模块,那么我需要像这样提到application.gwt.xml中的每个模块路径。 2011-05-17 06:43:57

+0

好吧,用我的上面的例子中,你需要每行一行,这听起来很荒谬。我希望改变软件包结构以使配置更容易。 – edwardsmatt 2011-05-17 09:44:57