2012-07-31 39 views
0

我有以下架構。選擇合適的數據轉換設計模式,驗證

  1. 從用戶獲取數據
  2. 驗證數據DB

爲了簡化

  • 存儲數據,我們假設數據類型發票。我已經定義發票作爲接口

     
    Invoice() { 
    getInvoiceId(); 
    getInvoiceAmount(); 
    ... 
    .... 
    } 
    

    以我的實現方式之一,從用戶輸入是xml和在另一它是JSON 同樣我有兩個數據庫,一個存儲該發票xml和另一個爲JSON

    所以我實現了發票接口兩倍

     
    InvoiceXml() { 
    xml _invoiceData; 
    getInvoiceId() { 
    return _invoiceData.id; 
    } 
    
    InvoiceJson() { 
    json _invoiceData; 
    getInvoiceId() { 
    return _invoiceData.id; 
    } 
    

    現在我的主類接受發票接口的一個實例。

     
    main(Validator validator, DAO db) 
    { 
        Invoice invoice = inputs.getInvoice(); 
        if (invoice instanceOf InvoiceXml { 
        validator.validateXml(invoice); 
        db.insertXml(invoice); 
        } 
        else //similar for Json 
    } 
    

    現在關心我的是驗證和db都確實需要發票的JSON/XML表示,但因爲我的發票接口上只能靠我通過它來驗證和DB之前垂頭喪氣發票。

    我不確定如何以更好的方式進行設計。我正在考慮將Invoice接口更改爲POJO,但發票上有很多字段(getInvoiceId和getInvoiceAmount是常用字段),因此我必須將發票內部存儲爲xml或json值。

  • 回答

    0

    一種方法可以增加validate方法Invoice接口,並正確地實現它的實現InvoiceXmlInvoiceJson。但是這合併了兩個概念:模型和驗證。另一種方法是將接口Validator與方法validate分離,並實現兩種數據源特定的驗證方法。

    +0

    我有一個使用Validator接口的原型,但是如何在我想驗證InvoiceXml而不需要downcast的情況下強制使用XmlValidator的標準 – Arvind 2012-07-31 14:46:49

    +1

    interface invoice.validate(Validator v)'and xmlImplementation'validate( Validator v){v.validateXml(this)}' – mishadoff 2012-07-31 14:56:46