0

我有以下架构。

  1. 从用户那里获取数据
  2. 验证数据
  3. 将数据存储在数据库中

为简化起见,我们假设数据的类型为 Invoice。我已将 Invoice 定义为接口

发票 () {
获取发票 ID ();
获取发票金额();
...
……
}

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

所以我两次实现 Invoice 接口

发票Xml () {
xml _invoiceData;
getInvoiceId() {
返回_invoiceData.id;
}

发票Json () {
json _invoiceData;
getInvoiceId() {
返回_invoiceData.id;
}

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

main(验证器验证器,DAO 数据库)
{
   发票发票 = inputs.getInvoice();
   if (invoice instanceOf InvoiceXml {
    验证器.validateXml(发票);
    db.insertXml(发票);
   }
   else //与 Json 类似
}

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

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

4

1 回答 1

0

一种方法可能是向接口添加validate方法Invoice并在实现InvoiceXmlInvoiceJson. 但这合并了两个概念:模型和验证。另一种与方法接口Validator的方法validate是与模型分离并实现两个特定于数据源的验证方法。

于 2012-07-31T14:32:15.910 回答