我应该如何在域驱动设计结构中表示文件导入器?

How should i represent a file importer in Domain Driven Design structure?

我有这样的洋葱架构:

http://i.stack.imgur.com/qvyS5.png

我需要创建一个导入程序来监控文件夹并将文件导入数据库。

该进口商将 运行 提交 Windows 表格申请。

组件导入器 (class) 是我的基础设施或域的一部分?

否则应该如何按照 DDD 原则表示?

应用程序服务(如果我不理解您的应用程序意图,可能是域服务)。您的软件的目的是 监控文件 ,因此您的域中可能有 "file" class,IFileWatcher 作为文件夹观察器的抽象,IFileRepository 用于存储。 ..

"importer" 将使用这些接口。 this 是洋葱架构的更好形象。

还有2件事;

洋葱架构的底线是一种方式(一种架构方式)让您的域免受非域问题的影响(例如应用程序在linux中运行或 windows,将数据保存在 oracle,sql 服务器或文件系统中,UI 不会更改您的域模型等...)。

我是 DDD 的超级粉丝,但我觉得你的问题不值得(也许以数据为中心的架构会更好)。正如@Didaxis 所说:保持简单。尽可能简单地开发你的软件,应用 SOLID 原则,然后你会没事的。当你的应用程序增长时,你总是可以重新组织项目结构(顺便说一下,洋葱架构有大量的 DI 使用)。所以我建议您保持应用程序简单并应用 SOLID。

编辑: 这里有一些关于何时使用 DDD 以及何时不使用 DDD 的文章:

Do Either DDD or DDD But Not DDD

When To Use Domain-Driven Design

任何集成都应该在应用层而不是域中实现。因此,根据洋葱架构(或其他任何架构),这将是基础设施。

我倾向于将域视为物理计算器。计算器有输入(键盘)和输出(屏幕)。因此,域永远不会与域外的资源进行物理交互。域需要的一切都将从应用层传递给它,结果将由应用层处理。

因此,即使实际的数据库访问(例如使用面向持久性的存储库)和文件访问可能在基础架构中,应用程序层也会执行调用以获取对象,或者在它们被执行之前将它们放在一起基于域。

当我使用术语层时,它更像是一个逻辑问题,而不是物理层。物理结构将取决于几个因素,包括大量的偏好:)

因此,在您的情况下,您的 Windows 表单很可能充当应用程序层。它当然是整合点。但是,理想情况下,物理实现应该依赖于一些可重用的程序集,这些程序集可以从 Windows 服务甚至网站中使用。