私は以下のアーキテクチャを持っています。
- ユーザーからデータを取得する
- データを検証する
- データをデータベースに保存
簡単にするために、データのタイプが 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 値のみとして内部的に保存する必要があります。