繁体   English   中英

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

[英]How can I reuse code when two different wicket applications share common functionality

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

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

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

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

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

这是基于组件的框架的要点。 将公共代码(组件、行为、基类作为 session、应用程序等)放在单独的 java 项目 (.jar) 中。 以后在具体的.war项目中依赖这个项目(把.jar放在WEB-INF/lib中)。 瞧!

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

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

  1. 核心应用程序应该有相当数量的getXPanel()方法,每个子应用程序都会覆盖这些方法。 例如, getHeaderPanel()
  2. 使用每个人都扩展的“BasePage”class。 这是您设置整体外观、在子应用程序主题文件夹中覆盖并大量使用<wicket:extend>功能的地方。 也是放置 jQuery 进口等的好地方。
  3. 请记住,标记很容易被覆盖。 您的子应用程序不需要创建页面的 java 扩展来更改徽标。 只需使用不同的标记。

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM