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

Java 当两个不同的wicket应用程序共享相同的功能时,如何重用代码,java,wicket,code-reuse,Java,Wicket,Code Reuse,我有一个Wicket AuthenticatedWebApplication,它有几个页面和功能,需要在我必须开发的新AuthenticatedWebApplication中重用 我正在使用Wicket 1.4,Spring和Hibernate 这两个应用程序甚至将共享相同的外观(应用程序徽标除外),该外观现在在一个基本页面中实现 有没有人有过类似的经历?我绝对不想重复复制粘贴代码,因为通用功能实现了一个工作流过程,这个过程可以而且将会改变 如何保持我的应用程序模块化并实现我的目标?这是基于组件

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

我正在使用Wicket 1.4,Spring和Hibernate

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

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


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

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

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

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

执行此操作时,请给出一些建议:

  • 核心应用程序应该有相当数量的
    getXPanel()
    方法,每个子应用程序都会覆盖这些方法。例如,
    getHeaderPanel()
  • 使用每个人都扩展的“BasePage”类。这是您设置整体外观的地方,在子应用程序主题文件夹中覆盖,并大量使用
    功能。也是放置jQuery导入的好地方,ec
  • 请记住,标记很容易被覆盖。您的子应用程序不需要创建页面的java扩展来更改徽标。只需使用不同的标记即可
  • 我们的每个应用程序至少分为4个模块。例如:

  • 基本-Wicket依赖项,基本事件日志记录
  • 数据-用户应用程序、AdminPage、用户hibernate对象。每个页面都有自己的标记,但通常会被覆盖
  • 科学-一个核心项目,包含大量显示科学教科书的代码<代码>科学应用程序扩展用户应用程序
  • 基础-针对小学生的特定主题实施
    foundations应用程序扩展了科学应用程序
  • 探究-针对高中生的不同主题的具体实施
    InquiryApplication扩展了ScienceApplication

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

    从您的其他评论和答案判断:

  • 重构应用程序并将所有公共代码推送到(抽象)基类
  • 将它们移动到一个新项目,并将2个新应用程序项目的构建路径设置为需要基本包
  • 扩展基类以实现不断变化的功能
  • 根据您当前的实现,您可以通过实现两个不同的imageresources或通过从新项目到BasePage提供不同的模型来更改徽标,也可以将图像url放入属性中,并在应用程序中提供不同的属性文件。
    这同样适用于数据库或表。。。例如,使用JPA,您可以将所有全局使用的实体推送到您的基础上,并使用不同的表名实现两个不同的用户实体。您甚至可以使用共享的抽象baseUser实体来减少代码重复。

    我如何使用不同的徽标共享基本页面?例如,我如何拥有两个不同的登录并仍然使用基于角色的权限?应用程序徽标是必须更改的全部内容,还是您只想重用应用程序功能的一个子集?如果是后者,这个子集有多大(粗略估计50%/10%/75%就足够了)。如果是前者,你想共享同一个应用程序实例吗?@Nicktar子集可能占应用程序功能的80%左右。徽标和菜单肯定会在两个应用程序之间发生变化。身份验证应该是相同的,除了共享功能之外,每个应用程序都有一些自己独有的功能。然后,我在下面的回答中概述的解决方案应该可以工作。只需将共享功能编译成project/jar,并在需要的地方扩展/覆盖新项目中的类。关于第一个列表中的(2)+(3),您是否将页面标记与代码分开组织?@ireddick Yup;我们为标记、图像、css等使用一个单独的“主题”文件夹。我们将后端和前端工作分开,因此这也很有帮助。