.net 将数据从一种类型转换为另一种类型有哪些模式?
我正在做一个项目,在这个项目中,我必须从一个来源获取数据,并对其进行翻译/调整,以便它可以被另一个来源(在本例中是数据库)正确使用。我认为这是一个相当常见的问题,虽然我相信我已经有了一个良好的开端,但我一直在思考如何最好地实现解决方案的中间部分,该部分负责解析原始数据,并使该数据可用于流程的下一部分 假设我公司的服务器上有一个web服务,负责接收第三方供应商提供的销售订单。供应商调用web服务后,我应该有一个名为.net 将数据从一种类型转换为另一种类型有哪些模式?,.net,design-patterns,language-agnostic,oop,.net,Design Patterns,Language Agnostic,Oop,我正在做一个项目,在这个项目中,我必须从一个来源获取数据,并对其进行翻译/调整,以便它可以被另一个来源(在本例中是数据库)正确使用。我认为这是一个相当常见的问题,虽然我相信我已经有了一个良好的开端,但我一直在思考如何最好地实现解决方案的中间部分,该部分负责解析原始数据,并使该数据可用于流程的下一部分 假设我公司的服务器上有一个web服务,负责接收第三方供应商提供的销售订单。供应商调用web服务后,我应该有一个名为MyVendor.CustomOrder的强类型对象。然后,我负责解析MyVendo
MyVendor.CustomOrder
的强类型对象。然后,我负责解析MyVendor.CustomOrder
实例,以便在我公司的系统中将数据正确格式化为“订单”
我已经有了将数据插入数据库的存储过程,甚至还创建了与存储过程通信的助手方法。我还有一些接口,如IOrderHeader
,IOrderPayment
等,作为这些helper方法使用的数据的“契约”存在
我正在试图找出是否存在一个好的模式来解析原始MyVendor.CustomOrder
对象中的数据,以便为IOrderHeader
等接口提供数据。下面是我如何想象这些片段是如何组合在一起的(在一个稍微有用的ASCII图中):
到目前为止,我唯一的想法是创建一个处理所有事情的大型类,可能是这样的:
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();
我很想知道是否有更好的模式来解决从一种格式获取数据的问题,以便在不同的环境中正确使用数据。因此,您有一个类表示第三方供应商看到的订单,一个类表示域模型看到的订单,对吗?我不知道这是否有帮助,但在过去,我做过类似的事情,要么给我的类附加一个扩展方法(DomainClass dc=ThirdPartyClass.toDomainClass()),要么在一个类中有一个构造函数,可以获取它的姐妹类的一个实例并解析它(DomainClass dc=new DomainClass(ThirdPartyClass))。我的翻译逻辑与我的持久性逻辑所处的位置不同。我最终会得到像vendorRepository.SaveNewVendor(新域类(ThirdPartyClass))或vendorRepository.SaveNewVendor((ThirdPartyClass.toDomainClass())这样的东西
我不知道这对你是否有价值。这似乎是一个很好的案例 转换某个类b的接口 进入某个客户端的接口 c班学生理解
如果您收到来自不同第三方供应商的订单,您将为每个供应商创建一个适配器,然后您甚至可以使用工厂模式为给定供应商创建正确的适配器。从某种意义上说,您所做的有点类似于序列化。例如,XmlSerialization将对象转换为XML,然后返回into对象。要将MyVendor.CustomerOrder转换为系统中的一组对象(OrderHeader等),然后再转换回原始对象
如果遵循这种模式,您将拥有一个映射器对象,它知道如何从一种“格式”转换为另一种“格式”。XmlSerialization的映射器对象是XmlSerializer对象(为特定类型的对象配置)。您可以实现一个等效的mapper对象,它知道如何在两种格式之间来回封送数据。这是一个有趣的观察结果。我不确定它是否与我的模型完全匹配,因为我的数据只需要在一个方向上转换,不需要进行字符串序列化,但我可以看到哪里可能有simila它在“抽象”层面上绝对相似,但在“橡胶撞击”道路时有点不同。无论如何,我没有意识到你只是在一个方向上进行转换。考虑到这一点,我认为“mapper”类仍然是处理转换的好方法。但你是对的,这使得类比不那么直接。干杯
... = new MyVendorCustomOrderParserAndDatabaseUpdater(
customOrder).SendOrderToTheySystem();