当两个不同的wicket应用程序共享通用功能时,如何重用代码

时间:2011-07-06 16:32:28

标签: java wicket code-reuse

我有一个Wicket AuthenticatedWebApplication,它有几个页面和功能需要在我必须开发的新AuthenticatedWebApplication中重用。

我正在使用Wicket 1.4,Spring和Hibernate。

两个应用程序甚至会共享相同的外观(应用程序徽标除外),现在已在基页中实现。

有没有人有类似的经历?我绝对不想再复制粘贴代码,因为通用功能实现了可以并且将会改变的工作流程。

如何保持我的应用程序模块化并实现目标?

4 个答案:

答案 0 :(得分:1)

这是基于组件的框架的要点。 将公共代码(组件,行为,基类作为会话,应用程序......)放在单独的Java项目(.jar)中。后来依赖于特定.war项目中的这个项目(将.jar放在WEB-INF / lib中)。瞧!

答案 1 :(得分:1)

我的公司一直这样做。我们有一个核心包,包含基本UserApplication,用户帐户,登录,身份验证等。然后,我们开发的每个项目都扩展了这个基础包。有一些重复 - 例如几乎所有配置文件在每个配置文件中看起来都相同 - 但是每个配置文件都有自己的theme目录,该目录提供标记,并根据应用程序的外观进行定制。

执行此操作时的一些建议:

  1. 核心应用程序应该有相当数量的getXPanel()方法,每个子应用程序都会覆盖这些方法。例如,getHeaderPanel()
  2. 使用&#34; BasePage&#34;每个人都延伸的课程。您可以在此处设置整体外观,在子应用程序主题文件夹中覆盖,并大量使用<wicket:extend>功能。也是放置jQuery导入的好地方,ec。
  3. 请记住,标记很容易被覆盖。您的子应用程序不需要创建页面的Java扩展名来更改徽标。只需使用不同的标记。
  4. 我们的每个应用程序至少分为4个模块。例如:

    1. base - Wicket依赖,基本事件记录
    2. 数据 - UserApplication,AdminPage,用户hibernate obect。每个页面都有自己的标记,但通常会被覆盖。
    3. 科学 - 一个核心项目,包含大量用于显示科学教科书的代码。 ScienceApplication extends UserAppication
    4. 基础 - 针对小学生的主题特定实施FoundationsApplication extends ScienceApplication
    5. 查询 - 针对高中学生的不同主题特定实施InquiryApplication extends ScienceApplication
    6. 我们的两个科学应用程序有不同的标题,甚至有几个不同的页面,但ScienceApplication有我上面描述的那些方法。

答案 2 :(得分:1)

从您的其他评论和答案来看:

  1. 重构您的应用程序并将所有常用代码推送到(抽象)基类。
  2. 将这些项目移至新项目,并将2个新应用程序项目的BuildPath设置为需要基础包。
  3. 扩展基类以实现更改功能。
  4. 根据您当前的实施情况,您可以通过实施两个不同的图像资源或通过提供新项目到基础页面的不同模型来更改徽标,也可以将image-url放入属性并在应用程序中提供不同的属性文件。 这同样适用于数据库或表格...例如,使用JPA,您可以将所有全局使用的实体推送到您的基础,并使用不同的表名实现两个不同的用户实体。您甚至可以使用共享的抽象baseUser-entity来减少代码重复。

答案 3 :(得分:0)

根据你的问题,我猜你主要关注的是网页。那么这是我的建议: 首先,您应指定页面的哪些部分可以从一个应用程序更改为另一个应用程序。然后你必须取出这些部分的数据来获得模板。现在您应该(根据您的要求)决定如何存储数据(例如,在xml文件中,DB)。 现在,您可以根据需要在线或离线从模板编译页面。