4

我是 DDD 和 NHibernate 的新手。

在我当前的项目中,我有一个实体 Person,它包含一个值对象,比如说地址。今天,这很好。但也许有一天我会要求我的值对象(在本例中为地址)必须成为一个实体。

在尝试以 DDD 方式对此进行建模之前,以更加以数据为中心的方法,我有一个带有 Id 的表 Person 和另一个表 Address,其 PK 实际上是一个 FK,它是一个 Person 的 Id(即,一对一的关系)。

我一直在阅读,当我将值对象映射为组件时,它的值将被映射为我的实体表上的列(因此,我不会有一对一的关系)。

我的想法是,当需要时,我只需在我的地址表中添加一个代理键,然后它就变成一个实体。

我应该如何使用 NHibernate 进行设计?我是否应该已经将我的地址对象设为实体?

对不起,我什至不知道我的问题是否清楚,我真的迷路了。

4

2 回答 2

4

在我们正在构建的系统中,我们将值对象放在单独的表中。据我所知,NHibernate 要求id必须向对象添加一个,但我们忽略了这一点,并将对象视为系统中的值对象。您可能知道,Value-Object 是您不需要跟踪的对象,因此我们只是忽略id了对象中的 。这使我们可以更自由地以我们想要的方式对数据库进行建模,并以我们想要的方式对域模型进行建模。

于 2009-08-26T06:55:11.080 回答
0

您可以加入并使其成为允许 nHibernate 将其映射为适当的值对象而不是实体的组件。

这样,您将不需要任何虚拟属性,也不需要空的受保护 ctor(它可以是私有的)。

Join("PROPOSAL_PRODUCT", product =>
{
    product.Schema(IsaSchema.PROPOSALOWN);
    product.KeyColumn("PROPOSAL_ID");

    product.Component(Reveal.Member<Proposal, Product>("_product"), proposalProduct =>
    {
        proposalProduct.Map...
    });
});
于 2015-05-07T15:13:50.693 回答