English 中文(简体)
将数据从一种类型转换到另一种类型有什么模式?
原标题:What patterns exist for translating data from one type to another?

我在开展一个项目时,我不得不从一个来源获取数据,翻译/储存数据,以便这一数据库能够由另一个来源适当消费。 我认为这是一个相当常见的问题,虽然我相信我会开一个良好的开端,但我却不敢说,如何最好地实施解决办法的中间部分,因为后者负责平整原始数据,并将这些数据提供给我的下一个工作。

请允许我说,我在公司服务器上有一个网络服务,负责接收第三方供应商提供的销售订单。 在供应商要求网络服务之后,我应有一个称作的强烈型物体。 然后,我负责对<代码>进行校服。 MyVendor.CustomOrdere 用于获取数据的适当格式,作为我公司系统中的“顺序”。

我已经储存了将数据输入数据库的程序,我甚至创造了与储存的纸浆进行通信的帮助方法。 我也有诸如<代码>IOrder Header、IOrderPayment等接口,作为这些助手方法所消耗数据的“合同”。

如果在原始<代码>中的数据分类存在良好模式,则Im试图表示。 为<代码>提供数据的目的 IOrder Header et al crosss. 这里,我可以如何直观一下碎片的聚集(稍有帮助的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();

我很想知道,是否有更好的模式来解决这一问题,即从一种格式获取数据,以便在不同的环境中适当消费数据。

最佳回答
问题回答

因此,你有一个代表订单的班子,正如你的第三方供应商所看到的,一个代表订单的班子是正确的? 我不知道这是否有助于,但在过去,我曾经做过这样的事情:要么在我的班子(DomainClass dc = ThirdPartyClass.to DomainClass())上附加一种推广方法,要么在一班中配备一个能够对其姐妹班子和教区进行检验的建筑商(DomainClass dc = 新的域名(第三区)。 在我坚持逻辑的同一地方,我没有翻译逻辑。 最后,我要谈谈供应商存放处。 Save NewVendor(new territorialClass(IIIPartyClass))或供应商保管人Save NewVendor(IIIPartyClass.toDomainClass())

如果对你有任何价值的话,我就没有。

从某种意义上来说,你重新做些什么与序列化有些相似。 例如,XmlSerialization将物体转换为XML,然后退回到物体。 你们想要皈依我的朋友。 客户 命令进入贵系统的一系列物体(OrderHeader等),然后回到原物体。

如果你遵循这一模式,你就会有一个地图标,知道如何从一个“原”转换到另一个。 XmlSerialization smapper物体是XmlSerializer物体(为特定类型的物体配置)。 你们可以实施一个相当的地图标,它知道如何在两种格式之间重新记录数据。





相关问题
Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How do I compare two decimals to 10 decimal places?

I m using decimal type (.net), and I want to see if two numbers are equal. But I only want to be accurate to 10 decimal places. For example take these three numbers. I want them all to be equal. 0....

Exception practices when creating a SynchronizationContext?

I m creating an STA version of the SynchronizationContext for use in Windows Workflow 4.0. I m wondering what to do about exceptions when Post-ing callbacks. The SynchronizationContext can be used ...

Show running instance in single instance application

I am building an application with C#. I managed to turn this into a single instance application by checking if the same process is already running. Process[] pname = Process.GetProcessesByName("...

How to combine DataTrigger and EventTrigger?

NOTE I have asked the related question (with an accepted answer): How to combine DataTrigger and Trigger? I think I need to combine an EventTrigger and a DataTrigger to achieve what I m after: when ...

热门标签