相关疑难解决方法(0)

值对象如何存储在数据库中?

我还没有看到任何示例,但我认为它们保存在数据库中的包含实体表中.

IE浏览器.如果我有一个Person实体/聚合根和一个相应的Person表,如果它有一个名为Address的值对象,则Address值将保存在此Person表中!

对于我有其他实体(如公司等)拥有地址的域名,这是否有意义?

(我目前正在编写项目管理应用程序并尝试进入DDD)

domain-driven-design value-objects

56
推荐指数
2
解决办法
8827
查看次数

DDD:值对象中是否有列表?

我不熟悉域驱动设计,最近我开始为项目创建域模型.我还没有决定使用ORM(虽然我可能会选择NHibernate)而且我目前正在努力确保我的Value Objects应该就是这样.

我有一些VO除了封装"喜欢"术语之外几乎没有任何行为,例如:

public class Referral {
    public Case Case { get; set; } // this is the a reference to the aggregate root
    public ReferralType ReferralType { get; set; } // this is an enum
    public string ReferralTypeOther { get; set; }
} // etc, etc.
Run Code Online (Sandbox Code Playgroud)

这个特殊的类有一个参考"案例",这是两个级别,所以如果说我要访问推荐我可以去:case.social.referral(案例,社交和推荐都是所有类,有一个单一的社交在一个案例中,社交中有一个推荐).现在,当我输入它时我正在查看它,我认为我不需要推荐中的案例,因为它可以通过社交实体访问,对吗?

现在,毫无疑问,我认为这应该是一个VO,而我计划用来将其保存到数据库的方法是让NHibernate为它分配一个代理标识符(我仍然不太清楚) ,如果有人可以请详细说明它也会帮助我,因为我不知道代理标识符是否要求我已经在我的VO中有一个Id,或者它是否可以在没有一个的情况下运行)和/或受保护的Id属性不会在Referral类之外暴露(仅用于持久保存到DB).

现在转到我的标题问题:VO应该有一个集合,(在我的情况下是一个List)里面吗?我只能将其视为数据库中的一对多关系,但由于没有身份,因此使类成为实体似乎不够.以下是代码:

public class LivingSituation {
    private IList<AdultAtHome> AdultsAtHome { get; set; }
    public ResidingWith CurrentlyResidingWith { get; set } // this is an enum
} // etc, etc.
Run Code Online (Sandbox Code Playgroud)

这个类目前没有Id,而AdultsAtHome类只有内在类型(string,int).所以我不确定这是否应该是一个实体,或者它是否可以作为VO保留,我只需要使用自己的表和私有/受保护的Id字段将我的ORM配置为使用1:m关系,以便ORM可以持久保存到DB.

另外,我应该为每个课程使用规范化表格吗?我想我只需要为每个类使用一个表,当有可能将类的多个实例分配给实体或值对象时和/或有可能与这些对象中的某些对象具有集合1:m的关系.对于具有内部类型但具有嵌套类型的某些值对象使用单个表我没有问题我认为使用规范化表是有利的.对此有何建议? …

c# domain-driven-design nhibernate-mapping value-objects

7
推荐指数
1
解决办法
1817
查看次数