我正在开发一个项目,我必须从一个源获取数据并对其进行翻译/调整,以便它可以被其他源(在本例中为数据库)正确使用。我想这是一个相当普遍的问题,尽管我相信自己的开局不错,但我仍然坚持如何最好地实施解决方案的中间部分,负责解析原始数据并生成该数据可用于我的流程的下一部分。将数据从一种类型转换为另一种类型存在哪些模式?
假设我的公司服务器上有一个Web服务,负责接收第三方供应商提供的销售订单。在供应商调用Web服务之后,我应该有一个名为MyVendor.CustomOrder
的强类型对象。然后我负责解析MyVendor.CustomOrder
实例,以便在我公司的系统中将数据格式化为“订单”。
我已经有存储过程插入数据到数据库中,我甚至创建了辅助方法来与存储过程进行通信。我还有一些接口,如IOrderHeader
,IOrderPayment
等,作为这些辅助方法要使用的数据的“契约”存在。
我试图找出如果一个很好的模式存在,即在原始MyVendor.CustomOrder
对象分析数据,为IOrderHeader
等接口提供的数据。以下是我可能想象的作品是怎么走到一起(在轻微有用的ASCII图):
________________________________
| |
| Web Service to receive order |
| |
| __________________________ |
|__| |__|
| MyVendor.CustomOrder |
|________________________|
||
||
\/
__________________________
| |
| ?????????????????????? |
| Parse |
| MyVendor.CustomOrder |
| and pass data to |
| next step |
| ?????????????????????? |
|________________________|
||
||
\/
_________________________
| |
________|________ |
| IOrderHeader | |
|_______________| Methods |
________|________ to |
| IOrderPayment | Add Data |
|_______________| to |
________|________ Database |
| IOrderDiscount| |
|_______________| |
________|________ |
| IOrderItem | |
|_______________| |
|_______________________|
||
||
\/
__________________________
| |
| Data Access Layer, |
| Database, etc.... |
|________________________|
我迄今唯一的想法是使处理一切,可能像这样一个巨型类:
public class MyVendorCustomOrderParserAndDatabaseUpdater
{
private IOrderItem _IOrderItem;
//other private interface instantiations
public MyVendorCustomOrderParserAndDatabaseUpdater(
MyVendor.CustomerOrder customOrder)
{
ParseOrderIntoInterfaces(customOrder);
}
private void ParseOrderIntoInterfaces(
MyVendor.CustomOrder customOrder)
{
//Parse customOrder into _IOrderItem, etc.
}
public bool SendOrderToTheSystem()
{
//Call the helper methods with the data
//from the private _IOrderHeader, etc. objects
//to update "the system"
}
}
然后,我会消耗这个目标的一些这样的代码:
... = new MyVendorCustomOrderParserAndDatabaseUpdater(
customOrder).SendOrderToTheySystem();
我想知道是否有解决获取数据F的这个问题更好的模式从一种格式,以便它可以在不同的环境中正确使用。
这是一个有趣的观察。我不是完全符合我的模型,因为我的数据只需要在一个方向上进行转换,而且我不需要进行字符串序列化,但是我可以看到哪里可能有相似之处。 – 2010-09-01 01:41:34
它在“抽象”层面绝对相似,但有点不同“当橡胶撞击”道路时。 :)在任何情况下,我都没有意识到你只是在一个方向上进行转换。考虑到这一点,我认为一个“映射器”类仍然是处理转换的好方法。但是你是对的,这使得这个比喻不那么直接。干杯! – mikemanne 2010-09-01 14:25:24