我应该如何在Domain Driven Design结构中表示文件导入器?

时间:2015-02-19 18:40:59

标签: c# design-patterns domain-driven-design

我有这样的洋葱架构:

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

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

此导入程序将在Windows窗体应用程序上运行。

组件导入程序(类)是我的基础结构还是我的域的一部分?

否则如何按照DDD原则表示它?

2 个答案:

答案 0 :(得分:2)

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

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

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

当我使用术语图层时,它比物理图层更具逻辑关注点。物理结构将取决于几个因素,包括良好的偏好:)

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

答案 1 :(得分:1)

应用程序服务(如果我不理解您的应用程序意图,可能是域服务)。您的软件的目的是监控文件,因此您可能在您的域中有“文件”类,IFileWatcher作为文件夹观察者的抽象和IFileRepository for storege ...

“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