Enums 域模型中对象的实体、值对象或枚举表示

Enums 域模型中对象的实体、值对象或枚举表示,enums,nhibernate-mapping,domain-driven-design,Enums,Nhibernate Mapping,Domain Driven Design,我正在尝试建立一个文档管理系统,尽管我读过很多关于实体、值对象、如何在如何映射它们之间进行选择等方面的内容。。。我仍然不知道什么是“正确”的方法。在这样的场景中,每个文档可以属于一个或多个类别,可以由属于一个或多个角色的用户查看,等等。。。因此,文档实体如下所示: public class Document { private int _id; private string _title; private string _brief; private DateTi

我正在尝试建立一个文档管理系统,尽管我读过很多关于实体、值对象、如何在如何映射它们之间进行选择等方面的内容。。。我仍然不知道什么是“正确”的方法。在这样的场景中,每个文档可以属于一个或多个类别,可以由属于一个或多个角色的用户查看,等等。。。因此,文档实体如下所示:

public class Document
{
    private int _id;
    private string _title;
    private string _brief;
    private DateTime _publicationDate;
    private string _author;
    private string _source;
    private DateTime _activeDate;
    private DateTime _inactiveDate;
    private IList<Category> _categories;
    private IList<Fund> _funds;
    private IList<Role> _roles;
    ...etc
}
或者作为值对象,或者角色(例如)应该只是一个枚举:

public enum Role
{
    AllUsers
    ,ShareHhlders
    ,Registered
    ,Administrator
}
我从实体方法开始,但现在我正在尝试创建“添加文档”功能和UI,并质疑这是否是正确的方法-在添加文档UI中,用户获得一组复选框列表,并选择哪些类别、角色等。。。该文件将属于。Onec此信息会传递给控制器(我使用的是ASP.NET MVC),如果选中了复选框,则会传递给类别/角色/基金等。。。需要创建并添加到文档对象中,但为此需要类别/角色/基金的Id。因此,这意味着我必须在应用程序中维护映射对象,以获取给定类别/rle/fund的类别/角色/资金ID,并将其传递给类别/角色/资金对象的构造函数。这看起来真的不对,所以我才问这个问题

我开始尝试将对象更改为enum,但是用于引用完整性的enum和category/role/fund/many-to-many映射表需要单独维护。这似乎是满足持久性的一个要求,但在数据库级别,我认为有必要维护单独的类别/角色/资金表、映射表和外键约束。(同样使用NHibernate进行ORM映射和持久化,ut应该能够让它很好地与enumss配合使用)


感谢

在实体和值对象之间进行选择时,确定对象是否具有可更改的内部零件的唯一标识非常重要。如果对象具有唯一标识并支持内部更改,那么这些更改是否需要跟踪或持久化到数据库?简而言之,您需要在这些对象上持久化CRUD操作吗?如果是这样,您可能有一个实体。如果没有,则可能有一个值对象


我的直觉告诉我,如果可以创建枚举而不是实体,那么就不需要实体对象。我赞成使用NHibernate保存外键以实现引用完整性。

谢谢Kevin-在应用程序的这个阶段,类别/基金/角色对象不需要支持内部更改/操作。对象确实具有唯一的标识,但实际上仅用于数据库标识和引用完整性。基于此,仍然使用枚举并处理以下缺点:1。在sink(不生成代码)2中手动维护类别/基金/角色表和枚举。重新编译应用程序以更改类别/资金/角色。如果应用程序需要允许用户使用UI添加类别/资金/角色,那么我想我必须切换到实体或价值对象以支持CRUD操作?那么它是实体还是价值对象?还有什么想法吗?感谢如果应用程序将来需要支持类别、基金和角色的CRUD操作,那么这些可能会成为实体。值对象是不可变的一次性对象。值对象可以创建为实体数据的组件,但在应用程序代码中,它们本身并不是唯一标识为持久对象的。我希望这能有所帮助。编辑:当需求到来时,这些可能会成为实体。
public enum Role
{
    AllUsers
    ,ShareHhlders
    ,Registered
    ,Administrator
}