我有以下架构。
为简化起见,我们假设数据类型为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值。
答案 0 :(得分:0)
一种方法是将validate
方法添加到Invoice
界面,并在实施InvoiceXml
和InvoiceJson
上正确实施。但这合并了两个概念:模型和验证。使用方法Validator
的接口validate
与模型分离并实现两种数据源特定验证方法的另一种方法。