我有一個應用程序在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應用程序本身並不會真正運行,它只會在本地應用程序中使用。但顯然不能引用本地類。
乾杯的任何援助。