我是 DDD 的初学者,在架构方面遇到了一点问题。
我们的系统必须能够以各种格式(Excel、Word、PDF 和其他更奇特的格式)导出业务数据。
在您看来,哪一层必须负责检索源数据、以目标格式导出它们并为用户准备最终结果的整个过程?我在域和应用程序职责之间感到困惑。
关于导出子系统,实现及其通用接口契约是否应该属于基础设施层?
我是 DDD 的初学者,在架构方面遇到了一点问题。
我们的系统必须能够以各种格式(Excel、Word、PDF 和其他更奇特的格式)导出业务数据。
在您看来,哪一层必须负责检索源数据、以目标格式导出它们并为用户准备最终结果的整个过程?我在域和应用程序职责之间感到困惑。
关于导出子系统,实现及其通用接口契约是否应该属于基础设施层?
既不是应用程序层,也不是域层或任何其他“层”。DDD 不是分层架构。在这个主题上搜索 mor 的洋葱架构或端口和适配器模式。
现在到你问题的核心。您面临的问题是单独的有界上下文,应该转到系统的单独组件。让我们称之为报告。由于这只是一个表示问题,没有领域逻辑——DDD 不适合它。只需制作一些 SQL 视图,使用 NHibernate、LINQ2SQL、EF 甚至普通的 DataReaders 读取它们,然后使用 Builder 模式构建您的 Word/任何文档。没有聚合、存储库、服务或任何其他 DDD 构建块。
您可能想要更进一步,让应用程序中的所有数据表示都由单独的组件处理。那是CQRS。
我通常尽可能采用简单的方法。
域代码实现了您域的语言 - 名词、动词等。
应用程序代码使用这种语言创作诗歌。
因此,在您的示例中,输出的构造是应用程序关注的问题,而应用程序将讨论的位的构造(因为您没有提及)将是域关注的问题。
例如,如果报告包含销售数据,则日期、账单、订单等内容将在域中抽象地构建,而应用程序将关注使用这些数据生成文档。