Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该使用什么模型/模式来处理多个数据源?_C#_Asp.net_Sql - Fatal编程技术网

C# 我应该使用什么模型/模式来处理多个数据源?

C# 我应该使用什么模型/模式来处理多个数据源?,c#,asp.net,sql,C#,Asp.net,Sql,作为电子商务系统的一部分,我需要设计并实现各种黑盒。这需要接受来自各种内部和外部数据源(即网站、extranet、yahoo store、amazon xml提要等)的客户和订单,并插入/更新后端系统。用于插入/更新客户和订单数据的api已准备就绪,并且运行良好。现在我们需要添加处理来自其他数据源的订单的能力 我一直倾向于提供者模型(每个数据源有一个提供者),并在调用api实际添加客户和下订单之前,使用它将数据标准化到sql server表中。还有其他的模式或模式我应该考虑吗?您以前处理过这个问

作为电子商务系统的一部分,我需要设计并实现各种黑盒。这需要接受来自各种内部和外部数据源(即网站、extranet、yahoo store、amazon xml提要等)的客户和订单,并插入/更新后端系统。用于插入/更新客户和订单数据的api已准备就绪,并且运行良好。现在我们需要添加处理来自其他数据源的订单的能力

我一直倾向于提供者模型(每个数据源有一个提供者),并在调用api实际添加客户和下订单之前,使用它将数据标准化到sql server表中。还有其他的模式或模式我应该考虑吗?您以前处理过这个问题吗?您是如何解决的?有什么资源(文章、书籍、项目等)我应该看一下吗?

您可能会发现ETL(提取转换加载)工具比试图用代码解决问题更容易

  • (SQL Server集成服务)
  • (Oracle数据集成器)
这些是专门为您描述的数据加载工作类型而设计的

编辑

虽然我仍然认为ETL工具最能满足您的需求,但如果您坚持用代码来实现它,那么您应该考虑将ETL作为一种模式来实现。这是因为ETL是从各种来源加载数据的公认最佳实践。您应该花一些时间来研究ETL是如何实现的

在基本级别上,您应该有三个层:提取层、转换层和加载层

提取层应负责从源中检索数据。它不应该担心此时数据的形状。为了保持层的干净,您应该只实现在这里“获取”数据的代码。担心在转换层中塑造它

转换层应负责从各种来源提取数据,并将其转换为目标形状。ETL工具通过将数据视为管道来非常有效地实现这一点。这些可以拆分和并行。你可能没有时间或资源来做这件事。另一种方法是将数据加载到暂存表中(数据的非标准化表示)

load层获取转换后的数据(在上述情况下是从暂存表中),并将其加载到最终目标位置


这将充分分离您的层,以便您可以保护自己不受未来变化的影响。但是,请记住,您实际上只是在做ETL工具将为您提供的开箱即用的功能。

如前所述,ETL可能是一条可行之路,除非您能够标准化前端订单的方式,如EDI或web服务


使用ETL工具从源(电子邮件、FTP文件等)转换在您的SQL Server中有一个公共管道,然后有一个单独的进程来处理流水线中的未决批处理。

我在SSSQL中查看了MSIS服务器环境,但是发现了该方法的问题:我真的在寻找一个代码解决方案,虽然我会考虑AddiaTest.SSIS和ODI是特定于技术的。我同意SSIS受到微软版本3之前的问题的困扰;虽然它不完美,但它是有用的。Informatica不是特定于技术的,它非常好,尽管价格昂贵。更新答案,包括代码解决方案的起点。