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

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

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

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

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

我可以做些什么来保持我的应用程序模块化,并实现我的目标?

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

你这样做的一些建议:

  1. 核心应用程序应该有相当数量的getXPanel()方法,每个子应用程序都会覆盖这些方法。 例如, getHeaderPanel()
  2. 使用每个人都扩展的“BasePage”类。 您可以在此处设置整体外观,在子应用程序主题文件夹中重写,并大量使用function。 也是放置jQuery导入的好地方,ec。
  3. 请记住,标记很容易被覆盖。 您的子应用程序不需要创建页面的Java扩展名来更改徽标。 只需使用不同的标记。

我们的每个应用程序至少分为4个模块。 例如:

  1. base – Wicket依赖,基本事件记录
  2. data – UserApplication,AdminPage,User hibernate obect。 每个页面都有自己的标记,但通常会被覆盖。
  3. 科学 – 一个核心项目,包含大量用于显示科学教科书的代码。 ScienceApplication extends UserAppication
  4. 基础 – 小学生的主题特定实现FoundationsApplication extends ScienceApplication
  5. 查询 – 针对高中学生的不同主题特定实施InquiryApplication extends ScienceApplication

我们的两个科学应用程序有不同的标题甚至几个不同的页面,但ScienceApplication有我上面描述的那些方法。

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

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

  1. 重构您的应用程序并将所有常用代码推送到(抽象)基类。
  2. 将这些移动到新项目并将2个新应用程序项目的BuildPath设置为需要基础包。
  3. 扩展基类以实现不断变化的function。

根据您当前的实现,您可以通过实现两个不同的图像资源或通过提供新项目中的不同模型到您的basebasepage来更改您的徽标,或者您可以将image-url放入您的属性并在您的应用程序中提供不同的属性文件。 这同样适用于数据库或表格…例如,使用JPA,您可以将所有全局使用的实体推送到您的基础,并使用不同的表名实现两个不同的用户实体。 您甚至可以使用共享的抽象baseUser-entity来减少代码重复。

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