0

私は以下のアーキテクチャを持っています。

  1. ユーザーからデータを取得する
  2. データを検証する
  3. データをデータベースに保存

簡単にするために、データのタイプが 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 値のみとして内部的に保存する必要があります。

4

1 に答える 1

0

1つのアプローチは、インターフェースにvalidateメソッドを追加しInvoice、実装とに適切に実装することInvoiceXmlですInvoiceJson。しかし、それは2つの概念をマージします:モデルと検証。モデルから分離し、2つのデータソース固有の検証メソッドを実装するValidatorメソッドとのインターフェイスを持つ別のアプローチ。validate

于 2012-07-31T14:32:15.910 に答える