2012-06-12 101 views
2

我参与了一个项目,用于构建可描述为规则引擎的Web应用程序,我们使用DDD方法来捕获和建模域和功能。坚持DDD应用程序中的应用程序特定数据

但是应用程序相关的数据呢,因为它是一个web应用程序,在安全/用户管理,日志管理方面将会有一个重要的部分。等等,杂项不属于域的一部分,但会有数据需要为他们管理。从DDD范例的初始阅读中,我们对领域模型以及存储库中的持久性有了一个公平的想法。应用程序服务层中包含的应用程序特定问题(如安全性,txn mgmt等)是我所了解的。

在这里/如何持久化应用程序特定的数据?如果这也应该被建模为不同的集合,并以类似的方式成为系统的一部分,或者应该以不同的方式构造(管理类与DAO交谈 - 类似交易脚本)?

回答

4

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

我觉得这些东西不应该污染域模型。安全或日志记录是基础设施层的一部分。这些东西的持久性应该由基础设施层来管理。考虑日志记录:可以登录到文件或数据库。而且您应该可以轻松地在各种类型的日志持久性之间进行切换。与安全性相同 - 数据库或ActiveDirectory? 这些东西独立于领域模型持久性而改变,所以你不应该混合他们

+0

所以,我认为,从应用的角度来看,这更多的是依赖于不同层次和包装的问题。假设你有一个SecurityManagerImpl,它将在基础设施层,并且应用层将使用它。但问题是你将在哪里为SecurityManagerImpl定义接口?该约定不具有对基础架构层的应用程序依赖性?它不仅仅是SecurityManager,还有一整套模型,比如UserModel等,如果你看到 – redzedi

+2

就形成了自己的域。如果你的应用层需要日志和安全功能,那么它就知道它需要什么,并且可以在某些接口中表达需求。在应用程序层定义这些接口。在基础设施层实施它们。让域层不知道所有这些东西。 –

相关问题