Domain driven design 在DDD应用程序中持久化特定于应用程序的数据

Domain driven design 在DDD应用程序中持久化特定于应用程序的数据,domain-driven-design,Domain Driven Design,我参与了一个项目,为可以描述为规则引擎的东西构建一个webapp,我们使用DDD方法来捕获和建模域和功能 但是与应用程序相关的数据呢,因为它是一个web应用程序,所以在安全/用户管理、日志管理方面会有很大一部分。等等,不属于域的杂项,但需要为其管理数据。通过对DDD范例的初步阅读,我们对域模型和通过存储库的持久性有了一个大致的了解。我的理解是,应用程序服务层中应包含特定于应用程序的问题,如安全性、txn管理等 在这种情况下,特定于应用程序的数据在何处/如何持久化?这也应该被建模为不同的聚合,并以

我参与了一个项目,为可以描述为规则引擎的东西构建一个webapp,我们使用DDD方法来捕获和建模域和功能

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


在这种情况下,特定于应用程序的数据在何处/如何持久化?这也应该被建模为不同的聚合,并以类似的方式成为系统的一部分,还是应该以不同的方式构造(管理类与DAO类似的事务脚本对话)?

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


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

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


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

因此,我认为,从应用程序的角度来看,这更多的是不同层和包装之间的依赖性问题。假设您有一个SecurityManagerImpl,它将位于基础架构层,应用层将使用它。但问题是,您将在哪里为SecurityManagerImpl定义接口?惯例是不将依赖性b/w应用程序与基础架构层关联?此外,它不仅是SecurityManager,而且是一整套模型,如UserModel等,它们形成了自己的领域。如果您看到您的应用程序层需要日志记录和安全功能,那么它就知道它需要什么,并且可以在某些接口中表达需求。在应用层中定义这些接口。在基础架构层实现它们。让域层不知道所有这些东西。因此,我认为,从应用程序的角度来看,这更多的是不同层和包装之间的依赖性问题。假设您有一个SecurityManagerImpl,它将位于基础架构层,应用层将使用它。但问题是,您将在哪里为SecurityManagerImpl定义接口?惯例是不将依赖性b/w应用程序与基础架构层关联?此外,它不仅是SecurityManager,而且是一整套模型,如UserModel等,它们形成了自己的领域。如果您看到您的应用程序层需要日志记录和安全功能,那么它就知道它需要什么,并且可以在某些接口中表达需求。在应用层中定义这些接口。在基础架构层实现它们。让域层不知道所有这些东西。