【问题标题】:Where should I put application specific thing while modelling using domain driven design?在使用域驱动设计进行建模时,我应该将应用程序特定的东西放在哪里?
【发布时间】:2015-07-14 17:33:54
【问题描述】:

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

【问题讨论】:

    标签: architecture domain-driven-design


    【解决方案1】:

    领域驱动设计不会试图告诉您如何安排架构。但是,它确实规定了应该和不应该进入您的域的内容。日志和菜单听起来不应该被允许进入你的AccessManagementContextRadiologyInformativeContext

    原因是语言。难免有人会提到infrastructure层。但这是一个架构问题,而不是领域驱动的设计问题。您可以开发一个名为HospitalRecordsSystem 的有界上下文,其无处不在的语言包含了日志记录的关注点。所以这是可能的,但你必须问“在这个有界的上下文中说的是无处不在的语言吗?”。

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

    【讨论】:

    • 你是绝对正确的。我在回答中将重点放在了项目结构和组织上。虽然这不是 DDD 的问题,但我确实怀疑这是困扰 OP 的问题。有时,对于初学者来说,通过实施而不是通过许多专家提倡的哲学方法来解决 DDD 是件好事。通过实践来理解。
    【解决方案2】:

    日志和“菜单”(我假设您的意思是像 web/windows 菜单控件)是基础设施和实现问题。它们肯定不属于您的域。

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

    虽然 DDD 不关心“解决方案组织”,但我怀疑这可能是您要问的。

    您的有界上下文(以及所有其他与域相关的代码)将存在于 层中。日志记录将在 Infrastructure 层中实现(除非日志记录确实是您的通用语言的一部分,正如 SephVelut 指出的那样)。菜单等将存在于 Client 文件夹中(例如在 Web 应用程序项目中)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2016-07-31
      相关资源
      最近更新 更多