c# - 数据整合层 (ETL) 的设计模式
问题描述
我必须使用 asp .net core 设计一个软件,该软件从各种数据源收集数据(如下图)。例如,DataSource1 和 DataSource2 包括属性等产品数据。DataSource 3 包括这些产品的资产。我想首先我将从每个数据源收集数据并将它们保存在自己的数据源中,并使用下面定义的实体。稍后我在翻译或转换数据以使用一个抽象实体时具有优势。
我的问题是哪种模式应该适合这个系统?存储库,管道,...??你能给我看一些伪代码吗?
如果我使用接口但应该有多个数据源实例,那么 DI 怎么办?
解决方案
应该应用一个模式(或一组模式)来解决特定的问题/复杂性。
我认为您需要的模式是Facade。它将解决
的问题是它将为您的客户隐藏“三个数据源”的复杂性。
在 Facade 中,您可以将数据合并为一个合理的实体。
此外,您可以使用代理模式,它可以为您提供“合并”实体的“缓存”功能,这可以解决您描述的第二个复杂性。
我不确定我是否理解将这些项目保存到第四个数据存储中的想法,这可能是一种矫枉过正 - 但无论如何,这也可以通过代理类来实现 - 只是缓存会更永久 - 如果你域“允许”它。
至于 Repository (模式) - 好吧,我相信您应用的任何合理的解决方案很可能会隐藏您的数据访问的细节,最终将成为 Repository 的实现。
我不会对命名模式和坚持书籍或文章中的示例代码过于严格。模式是可以根据需要进行调整的高级指南。
推荐阅读
- javascript - 无法连接到 Node.js 应用程序(DOCKER)中的远程 MySQL 数据库?
- reactjs - 输入在 Reactjs 的 Mobx 商店中不起作用
- java - Google guava LoadingCache:何时应该调用 cache.cleanup()
- rabbitmq - RabbitMQ - Join_Cluster - 没有函数子句匹配
- javascript - 如何使用addonisjs在Controller中foreach循环数据
- ssh - Flutter:如何通过 ssh 进入树莓派
- c++ - 如何使新的连接监视器primaryScreen
- android - 在数据类kotlin android中是否可以使用不同类和数据类型的相同键?
- mysql - 第一个数据是officeIn,第二个数据是OfficeOut ..用户可以在一天内多次输入..我想要hh:mm:ss格式的他在办公室待多久
- bash - 在后台运行 bash 脚本循环,它将 jar 命令的结果写入文件