【发布时间】:2015-07-14 17:33:54
【问题描述】:
我们正在开发一个使用领域驱动设计的医院管理系统。我们有像AccessManagementContext、RadiologyInformativeContext 等有界上下文。
但是我应该在哪里放置应用程序表,例如 Logging,Menu 之类的东西?
【问题讨论】:
标签: architecture domain-driven-design
我们正在开发一个使用领域驱动设计的医院管理系统。我们有像AccessManagementContext、RadiologyInformativeContext 等有界上下文。
但是我应该在哪里放置应用程序表,例如 Logging,Menu 之类的东西?
【问题讨论】:
标签: architecture domain-driven-design
领域驱动设计不会试图告诉您如何安排架构。但是,它确实规定了应该和不应该进入您的域的内容。日志和菜单听起来不应该被允许进入你的AccessManagementContext 和RadiologyInformativeContext。
原因是语言。难免有人会提到infrastructure层。但这是一个架构问题,而不是领域驱动的设计问题。您可以开发一个名为HospitalRecordsSystem 的有界上下文,其无处不在的语言包含了日志记录的关注点。所以这是可能的,但你必须问“在这个有界的上下文中说的是无处不在的语言吗?”。
最后,关于建筑。在传统的分层架构中,您会将基础架构问题(I/O、持久性、验证、Plumping 等)放在与您的域分离的层(在另一个命名空间/目录中),并防止域直接依赖于该层的事物。相反,您将使用接口和依赖反转来连接两者。
【讨论】:
日志和“菜单”(我假设您的意思是像 web/windows 菜单控件)是基础设施和实现问题。它们肯定不属于您的域。
为了让您了解如何在 VS 解决方案中实现 DDD 原则,以下是使用 Onion Architecture 的基本布局:
虽然 DDD 不关心“解决方案组织”,但我怀疑这可能是您要问的。
您的有界上下文(以及所有其他与域相关的代码)将存在于 域 层中。日志记录将在 Infrastructure 层中实现(除非日志记录确实是您的通用语言的一部分,正如 SephVelut 指出的那样)。菜单等将存在于 Client 文件夹中(例如在 Web 应用程序项目中)。
关于日志记录,如果您希望在域代码中捕获日志,您可能需要考虑查看 Domain Events。
【讨论】: