私は3つの異なる国で使用されているアプリを持っています。いくつかの国に依存する例外を除いて、ほとんどすべて同じです。たとえば、注文には米国では消費税がありますが、英国ではありません。各国には独自のデータベースがあり、互いに完全に分離されていますが、これらの国固有のプロパティのテーブル構造にはわずかな違いがあります。すべての国が共有する列と同様に、テーブル名は常に同じです。それらを異なるものにするのは余分な列だけです。
現在、結果として、私は実際に3つの別々のアプリケーションを持っており、コードは約80%同一です。何かを開発するたびに、それを個々のアプリケーションにコピーする必要がありますが、これは少し面倒です。
私の計画は、グローバルなアプリケーションを試してから、これを3つのはるかに小さな国固有のものに拡張することです。
私のサービスとdaosの場合、これはグローバルなインターフェースと、ローカルなアプリ間で異なる実装によって処理できます。ローカルアプリは、依存関係としてグローバルを取り込みます。
しかし、私の問題はビジネスオブジェクトにあります。もう一度例として注文を使用すると、私のサービスとdaosの多くはOrderオブジェクトを使用しますが、コードは国全体で同一であるため、グローバルになります。したがって、ある種のGLOBALOrderオブジェクトが必要です。ただし、国によっては、追加のプロパティが利用可能であり、再度保存した場合に保持されることも確認したいと思います。
例として、注文の追跡をチェックし、それを配達済みとしてマークするサービスがあります。このサービスはグローバルであるため、GLOBALOrderオブジェクトにアクセスできます。orderDaoインターフェースがグローバルであるため、orderDao.getOrder(id)が呼び出されます。orderDaoImplはローカルであるため、getOrder(id)メソッドは、実際には、追加のフィールドを含むローカライズされたOrderインスタンスを返します。これがレイヤーを通過すると、再び追跡サービスに到達します。これは、グローバルオーダーを期待しています。つまり、ローカライズされたフィールドは利用できません(このtrackingServiceはそれらを気にしないので、問題ありません。ローカライズされます)。
このグローバル注文のステータスを更新するときは、保存されたときにローカライズされたプロパティが失われないようにする必要があります。
だから私の大きな質問は、どうすればこれを機能させることができるかということです。
オプション1: 「選択的な一時性」を定義する方法はありますか?したがって、すべての可能なプロパティを持つ単一のJavaオブジェクトがあります。各アプリケーションで使用する場合、これらのプロパティのいずれかがデータベーステーブルに存在しない場合は、無視して続行してください。
また
オプション2: グローバルレベルとローカルレベルの両方で使用できる抽象/インターフェイスクラスを使用する方法はありますか?ローカルアプリは、実装されたサブクラスとしてオブジェクトを自動的にキャストしますか?
GLOBALアプリ自体が実際に単独で実行されることはなく、ローカルアプリ内でのみ使用されることを指摘しておく価値があります。しかし、明らかにローカルクラスへの参照を持つことはできません。
助けてくれてありがとう。