4

我正在尝试学习 DDD 的概念。我做了一个项目,我使用数据库优先方法。在基础设施中,我添加了一个 edmx 文件,我选择自动生成实体。现在在“域”中,我正在尝试创建聚合。

但是在这里我遇到了一些问题。我正在尝试创建一个名为“用户”的聚合,但用户已经存在于 ef 自动生成的实体中。我是否应该将聚合“用户”重命名为其他名称,并且在从数据库中获取数据时将其从数据库实体映射到聚合。

我做错了吗?或者我不应该自动生成实体还是实体聚合?

请建议和帮助。

在此处输入图像描述

4

2 回答 2

7

如果您想忠实于 DDD,您应该将域对象建模为独立于您的持久性解决方案。DDD 通过存储库处理持久性。不要使用 EF 生成的“实体”作为您的域模型;而是设计您自己的模型并实现一个使用 EF 进行持久性的存储库。

于 2012-08-31T06:13:14.637 回答
3

在我看来,领域驱动设计和“数据库优先”是对立的。领域驱动设计关注复杂行为,数据模型关注数据的静态结构。

如果我有幸从一个干净的情况开始,我不会通过首先创建一个遗留数据库来使它变得比必要的更复杂。考虑到 DDD 面向复杂领域,其中发现和学习是过程的一部分。

为了支持持续的学习过程,最好依赖更专门为进化而设计的软件组件(如可以在廉价单元测试下的面向对象的域模型),而不是进化肯定更昂贵的数据库设计。

没有人能在一开始就做好每一件事。所以我最好从一次性成本很低的东西开始。

于 2012-10-29T13:59:15.217 回答