2

在创建领域模型时,我们的实体几乎总是有 Id 字段或属性,它代表数据库中相应表的主键列。我的问题是 - 如果我有这个与域模型无关的关键属性(换句话说,它只是数据库问题;Martin Fowler 更喜欢将其命名为无意义的密钥),持久层是否会泄漏到我的域中?如果是,我该如何预防?

4

3 回答 3

3

换个角度看问题:隐藏主键会让您的团队更容易开发解决方案,还是更难

不要担心 PK 值“泄漏”到您的实体中——我确信您的软件有更大的问题需要解决。

于 2010-07-26T09:58:08.813 回答
1

摘自一本名为:数据库系统 - 完整的书的大书

是唯一标识其实体集中的实体的属性或属性集。没有两个实体可以就构成键的所有属性的值达成一致。然而,允许两个实体就某些但不是全部属性达成一致

-

我们的经验 [...] 可能使我们相信很难找到键或确定一组属性形成键。在实践中,事情通常要简单得多。在通常由数据库建模的现实世界中,人们经常会不遗余力地寻找实体集。例如,公司通常将员工 ID 分配给所有员工,并且这些 ID 被仔细选择为唯一编号。这些 ID 的一个目的是确保在公司数据库中,每个员工都可以与其他所有员工区分开来,即使有多个同名员工也是如此。因此,员工 ID 属性可以作为数据库中员工的键。

虽然只有插入的人工 ID 不同的实体确实可能会引入重复(冗余)数据,但它们的使用远非毫无意义。在我看来,一种区分不同域实体的额外方法不会干扰域本身。

但至于你的问题的答案:

持久层是否泄漏到我的域中?如果是,我该如何预防?

如果你真的,真的想。您可以使用实体属性的组合来定义实体键。

希望能帮助到你。

于 2010-07-26T09:39:47.663 回答
1

确保在模型中也识别出有意义的键。包括代理项可能是可选的,但包括在现实世界中对您的数据有意义的有意义的键更为重要。

于 2010-07-26T20:48:34.607 回答