私は以下のアーキテクチャを持っています。
- ユーザーからデータを取得する
- データを検証する
- データをデータベースに保存
簡単にするために、データのタイプが Invoice であると仮定します。Invoice をインターフェイスとして定義しました
請求書 () { getInvoiceId (); getInvoiceAmount(); ... .... }
私の実装の1つでは、ユーザーからの入力はxmlであり、別の実装ではjsonです。同様に、2つのデータベースがあり、1つは請求書をxmlとして保存し、もう1つはjsonとして保存します
したがって、Invoice インターフェイスを 2 回実装します。
InvoiceXml () { xml _invoiceData; getInvoiceId() { return _invoiceData.id; } InvoiceJson () { json _invoiceData; getInvoiceId() { return _invoiceData.id; }
これで、メイン クラスは Invoice インターフェイスのインスタンスを受け入れます。
main(バリデータバリデータ、DAO db) { インボイス 請求書 = input.getInvoice(); if (invoice instanceOf InvoiceXml { validator.validateXml(請求書); db.insertXml(請求書); } else //Json と同様 }
ここで私が懸念しているのは、バリデーターとデータベースの両方が実際に請求書の json/xml 表現を必要とすることですが、私は請求書インターフェースのみに依存しているため、検証とデータベースに渡す前に請求書をダウンキャストする必要があります。
これをより良い方法で設計する方法がわかりません。Invoice インターフェイスを POJO に変更することを考えていましたが、Invoice には多くのフィールドがあるため (getInvoiceId と getInvoiceAmount が一般的に使用されるものです)、請求書を xml または json 値のみとして内部的に保存する必要があります。