为数据转换,验证选择正确的设计模式

时间:2012-07-31 14:22:04

标签: design-patterns refactoring

我有以下架构。

  1. 从用户
  2. 获取数据
  3. 验证数据
  4. 将数据存储在db
  5. 为简化起见,我们假设数据类型为Invoice。我已将Invoice定义为接口

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

    在我的一个实现中,来自用户的输入是xml而另一个是json 同样,我有两个数据库,一个将发票存储为xml,另一个存储为json

    所以我将Invoice接口实现两次

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

    现在我的主类接受Invoice接口的实例。

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

    现在我担心的是验证器和数据库实际上都需要发票的json / xml表示,但由于我只依赖于Invoice接口,所以我必须在将Invoice传递给validate和db之前将其转发。

    我不确定如何以更好的方式设计它。我正在考虑将Invoice接口更改为POJO,但Invoice上有许多字段(getInvoiceId和getInvoiceAmount是常用的),因此我必须将发票内部存储为xml或json值。

1 个答案:

答案 0 :(得分:0)

一种方法是将validate方法添加到Invoice界面,并在实施InvoiceXmlInvoiceJson上正确实施。但这合并了两个概念:模型和验证。使用方法Validator的接口validate与模型分离并实现两种数据源特定验证方法的另一种方法。