我有一个应用程序在3个不同的国家使用。它几乎都是一样的,有少数国家依赖的例外情况,例如订单将在美国有salesTax,但在英国不会。每个国家都有自己的数据库,彼此完全分开,这些国家特定属性的表格结构略有不同。表格名称总是相同的,所有国家共享的列也是如此。只有多余的列让他们不同。Spring/Hibernate相同实体不同的数据库结构
目前,我实际上有3个独立的应用程序,约80%相同的代码。每次我开发一些东西时,我都需要将它复制到每个单独的应用程序中,这有点费力。
我的计划是尝试拥有一个全球应用程序,然后用3个小得多的国家特定应用程序来扩展它。
对于我的服务和道教,这可以通过我的全球接口来处理,并且任何应用程序在本地应用程序之间都有所不同。本地应用程序将作为依赖项拉入全球。
但是,我的问题是与业务对象。再次以订单为例,我的许多服务和daos使用Order对象,并且它们将是全局的,因为代码在各个国家/地区是相同的。所以我需要有某种GLOBAL Order对象。但我也想确保取决于国家,如果我再去保存它们,额外的属性是可用的并且持续存在。
作为一个例子,我有一个服务,只检查订单的跟踪并将其标记为已交货。该服务是全球性的,因此可以访问GLOBAL Order对象。由于orderDao接口是全局的,它会调用orderDao.getOrder(id)。 orderDaoImpl应该是本地的,所以getOrder(id)方法实际上会返回一个本地化的Order实例,并添加额外的字段。当它通过图层传递时,它会再次到达跟踪服务,期望一个GLOBAL订单,这意味着本地化的字段不可用(这是可以的,因为这个trackingService不关心它们,如果是的话,实现会被本地化)。
当我更新这个GLOBAL订单的状态时,我需要确保它保存时本地化的属性不会丢失。
所以我最大的问题是我该如何做这项工作?
选项1:有什么方法可以让我定义一些“选择性瞬变”?所以我有一个具有所有可能属性的Java对象。在每个应用程序中使用它时,如果数据库表中不存在任何这些属性,请忽略它并继续。
OR
选项2:有没有办法,我用一些抽象/接口的类,它可以在全球和地区层面上使用,本地应用会自动铸造对象为实现子类?
值得指出的是,GLOBAL应用程序本身并不会真正运行,它只会在本地应用程序中使用。但显然不能引用本地类。
干杯的任何援助。