【问题标题】:What are the best practices when batch exporting from an application following DDD遵循 DDD 从应用程序批量导出时的最佳实践是什么
【发布时间】:2009-02-24 13:55:30
【问题描述】:

假设您有一个包含大量产品/客户/订单的数据库,并且代码库 (java/c#) 包含所有业务逻辑。在夜间,需要分批将数据导出到平面文件,然后通过 ftp 将它们传输到专有系统。

我们应该如何做这个“将数据库写入平面文件?最佳实践是什么?

一些想法:

  • 我们可以创建一个存储过程并使用 f.ex ssis 来获取数据吗?如果我们有一个“batch-output-database-table”也许我们可以做到这一点,但如果我们必须在文件写入之前执行逻辑就不行?

  • 我们可以使用与域的其余部分相同的存储库/业务逻辑来完成托管代码中的所有逻辑吗? (与存储过程解决方案相比,这可能是一个缓慢的过程)

  • 如果域服务的唯一接口是 Web 服务(每个请求可能需要“很长时间”),“最佳实践”会改变吗?

【问题讨论】:

    标签: java .net export domain-driven-design


    【解决方案1】:

    我个人更喜欢使用普通(托管)代码来实现提要而不是存储过程,主要是因为: 1)通常更容易与其他系统交互(即使它只是共享驱动器) 2)如果出现问题,很容易记录您需要的所有内容并进行调试 3)您可以重用您用于正常业务逻辑的相同代码(即使您只是引用相同的项目等也是有益的) 4) 通常您需要使用来自其他系统的一些信息来丰富数据,而这又比托管代码更容易做到。 5) 测试托管代码、进行所有单元测试、自动构建等更容易。

    我不确定为什么它需要比在存储过程中完成所有操作要慢得多。您只需要编写一个好的存储过程来提取您需要的数据,C#/java 应用程序将完成所有的转换、丰富等工作。

    编辑:回答评论: 我认为不可能说您是否应该重用现有的存储过程、调整它们或创建新的。我认为这是对性能的影响或所需的更改并不会比我尝试使用一组 proc 大,以避免重复逻辑。但如果差异很大,那么维护额外 proc 的成本可能会低于更改和发布现有的。

    【讨论】:

    • tnx 的答案。您会建议使用仅为给定导出制作的服务/存储库/存储过程方法,还是使用域中已经存在的方法? - 如果使用域方法,有时必须对其进行编辑以提供良好的性能可能不属于域本身的更改
    【解决方案2】:

    使用您已有的存储库代码。做一些性能测试,看看它是否符合性能。要求。如果有显着的性能。可以将问题归结为过多的 DB IO,然后使用存储过程或实施批量导出存储库。

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2011-09-19
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多