2012-07-31 65 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