我参与了一个为可以被描述为规则引擎的东西构建 Web 应用程序的项目,我们使用 DDD 方法来捕获和建模域和功能。
但是与应用程序相关的数据呢,因为它是一个 Web 应用程序,所以很大一部分是围绕安全/用户管理、日志管理的。等等,不属于域的一部分但会有需要管理的数据的杂项。通过对 DDD 范式的初步阅读,我们对领域模型和通过存储库进行持久化有了一个大概的了解。据我了解,应用程序特定的问题(例如安全性、交易管理等)将包含在应用程序服务层中。
在此,应用程序特定数据的持久性在何处/如何?是否也应该将其建模为不同的聚合并以类似的方式成为系统的一部分,或者应该以不同的方式构建它们(与 DAO 通信的管理器类 - 如事务脚本)?
最佳答案
我认为安全、日志记录等并不是领域专家所谈论的内容。这些东西不是领域的一部分,也不应该被设计为领域实体/聚合。如果它没有设计为实体,则不应将其持久化为实体。
我认为这些东西不应该污染域模型。安全或日志记录是基础设施层的一部分。这些东西的持久性应该由基础设施层来管理。考虑日志记录:您可以记录到文件或数据库。您应该能够在日志持久性类型之间轻松切换。与安全性相同 - 数据库还是 ActiveDirectory? 这些东西的变化独立于域模型持久性,所以你不应该混合它们。
关于domain-driven-design - 在 DDD 应用程序中持久保存应用程序特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10995929/