【发布时间】:2011-11-14 02:28:45
【问题描述】:
如果我正在使用 DDD 开发应用程序,那么基础设施和行为组件将放在哪里?例如,用户管理、用户特定配置、权限、应用程序菜单等。
这些组件确实与我的域所满足的业务需求无关,但它们仍然是我的应用程序的必需元素。其中许多还需要持久性。
【问题讨论】:
-
我会告诉你他们不属于哪里:域。
如果我正在使用 DDD 开发应用程序,那么基础设施和行为组件将放在哪里?例如,用户管理、用户特定配置、权限、应用程序菜单等。
这些组件确实与我的域所满足的业务需求无关,但它们仍然是我的应用程序的必需元素。其中许多还需要持久性。
【问题讨论】:
在您的项目中同时拥有非域组件和域是很正常的——毕竟并非所有东西都是面向业务域的。它们所属的位置实际上取决于您如何构建解决方案。在大多数情况下,我倾向于关注Onion Architecture,所以我的所有逻辑都由Application Services 提供,无论它是面向领域的还是非面向领域的。
【讨论】:
如果您发现您的用例很少需要来自与特定应用程序相关的核心域的信息,您可以将其拆分为单独的数据库。通过应用程序服务层访问此信息,因为该层应该满足您的应用程序需求。如果这包括用户配置文件持久性等,那很好。
但您记得,如果您遇到基础设施故障并且想要回滚某些事务日志或数据库备份,您可能希望回滚所有持久数据。因此,让这些域共享一个数据库会更容易。利弊 - 总是妥协...
如果我知道这个应用程序会与它的环境进行少量交互,我会将它放在一个数据库中,让应用程序服务层与客户端交互。
如果我知道会有多个应用程序/客户端,我可能会考虑拆分数据库,以便将 Webb 应用程序用户详细信息存储在单独的数据库中。很难说,因为我不了解所有要求。
/马格纳斯
【讨论】: