在使用域驱动设计进行建模时,我应该在哪里放置特定于应用程

时间:2015-05-05 05:56:09

标签: architecture domain-driven-design

我们正在使用域驱动设计开发医院管理系统。我们有AccessManagementContextRadiologyInformativeContext等上下文。 但是我应该把应用程序表放在哪里像Logging,Menu之类的东西?

2 个答案:

答案 0 :(得分:1)

记录和"菜单" (我假设你的意思是像web / windows菜单控件)是基础设施和实现问题。他们肯定不属于您的域名。

为了让您了解如何在VS解决方案中实现DDD原则,以下是使用Onion Architecture的基本布局:

Onion Architecture

虽然DDD不关心"解决方案组织",但我怀疑这可能就是你所要求的。

您的有界上下文(以及所有其他与域相关的代码)将存在于层中。日志记录将在基础设施层中实施(除非日志记录真正成为您无处不在的语言的一部分,正如SephVelut指出的那样)。菜单等将存在于客户端文件夹中(例如在Web应用程序项目中)。

关于日志记录,如果您希望捕获域代码中的日志,可以考虑查看Domain Events

答案 1 :(得分:1)

Domain Driven Design不会试图告诉您如何安排您的架构。但它决定了应该和不应该进入你的域名的内容。记录和菜单声音不应该被允许进入script-calls.phpAccessManagementContext

原因是语言。有人会不可避免地提到RadiologyInformativeContext层。但这是一个架构问题,而不是域驱动的设计问题。您可能会开发一个名为infrastructure的有界上下文,其无处不在的语言包含了Logging的关注点。所以这是有可能的,但是你必须要问“在这种有限的背景下是无处不在的语言吗?”。

最后,关于建筑。在传统的分层体系结构中,您可以将基础结构问题(I / O,持久性,验证,丰满等)放在与您的域(在另一个命名空间/目录中)分离的层中,并防止域直接依赖于该层中的内容。相反,你会使用接口和依赖性反转来连接两者。