【问题标题】:persisting Application specific data in DDD application在 DDD 应用程序中持久保存应用程序特定的数据
【发布时间】:2012-06-12 20:12:14
【问题描述】:

我参与了一个为可以被描述为规则引擎的东西构建 web 应用程序的项目,我们正在使用 DDD 方法来捕获和建模领域和功能。

但是与应用程序相关的数据呢,因为它是一个 Web 应用程序,所以会有很大一部分是围绕安全/用户管理、日志管理。等等,不属于域的杂项,但会有需要为它们管理的数据。从对 DDD 范式的初步阅读中,我们对域模型和通过存储库的持久性有了一个很好的了解。我所理解的应用程序服务层中包含应用程序特定的问题,如安全性、txn mgmt 等。

在这个哪里/如何持久化应用程序特定的数据?是否也应该将其建模为不同的聚合并以类似的方式成为系统的一部分,还是应该以不同的方式构建(管理器类与 DAO 对话——如事务脚本)?

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

    我认为安全、日志记录等不是领域专家所谈论的。这些东西不是域的一部分,不应该被设计为域实体/聚合。如果没有设计成实体,就不应该作为实体持久化。

    我认为这些东西不应该污染领域模型。安全性或日志记录是基础设施层的一部分。此类事物的持久性应由基础设施层管理。考虑一下日志记录:您可以记录到文件或数据库。您应该能够在日志持久性类型之间轻松切换。与安全性相同 - 数据库或 ActiveDirectory? 这些东西的变化独立于域模型持久性,所以你不应该混合它们

    【讨论】:

    • 所以,我认为,从应用程序的角度来看,这更多的是不同层和包装之间的依赖性问题。所以假设你有一个 SecurityManagerImpl 将在基础设施层和应用程序层将使用它。但问题是您将在哪里为该 SecurityManagerImpl 定义接口?约定是没有依赖 b/w 应用程序到基础设施层?此外,它不仅是 SecurityManager,还有一整套模型,如 UserModel 等,如果你看到的话,它们会形成自己的域
    • 如果您的应用程序层需要日志记录和安全功能,那么它知道自己需要什么,并且可以在某些接口中表达需求。在应用层定义这些接口。在基础设施层实现它们。让域层不知道所有这些东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多