我试图建立一个文档管理系统,尽管我已经阅读过有关实体,值对象,如何选择如何映射它们等信息。 ..我仍然无法弄清楚“正确”的方式是什么。非常典型地在这样的之情况,每个文档都可以beong属于一个或多个类别,可以通过属于一个或多个角色等用户查看......所以文档实体看起来是这样的:实体,值对象或域模型中的对象的枚举表示
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
}
的实际的域mondel和应用程序的业务逻辑目前非常简单,因此Category,Fund和Role对象不包含任何业务逻辑,而且实际上只是分类,访问控制等方式(在角色的情况下)等等。数据库,因此,我将有'角色','类别','基金'表格,然后将有2列的多对多映射表:例如DocumentId和RoleId。因此,我的问题是:
如果类别,资金,角色等在域中表示为实体,例如
public class Role
{
private int _id;
private string _name;
public virtual int Id
{
get { return _id; }
private set { _id = value; }
}
public virtual string Name
{
get { return _name; }
private set { _name = value; }
}
}
或值对象还是应该例如角色仅仅是一个枚举:
public enum Role
{
AllUsers
,ShareHhlders
,Registered
,Administrator
}
我与实体开始时的做法,但现在我试图创建“添加文件”功能和用户界面,并质疑它是否是正确的方法 - 在添加文档用户界面中,用户获得复选框列表组,并选择文档属于哪些类别,角色资金等。 Onec这个信息被传递给控制器(我使用的是ASP.NET MVC),如果已经选择了一个复选框,那么类别/角色/资金等等需要被创建并添加到文档对象中,但是要这样做类别/角色/资金的ID是必需的。因此,这意味着我必须在应用程序内维护映射对象,以获得给定类别/角色/基金的类别/角色/资金ID,以传递给类别/角色/基金对象的构造者。这真的看起来不正确,因此我问这个问题。
我开始尝试将对象更改为枚举,但之后需要单独维护用于引用完整性的枚举和类别/角色/基金/多对多映射表。这可能似乎是满足持久性的要求,但在数据库级别,我认为有必要维护单独的类别/角色/资金表,映射表和外键约束。 (也使用NHibernate进行ORM映射和持久化应该能够让它在枚举中表现良好)。
感谢
感谢凯文 - 在这个阶段,申请的类别/基金/角色对象没有必要支持内部更改/操作。这些对象确实具有唯一的标识,但它仅用于数据库标识和参照完整性的目的。基于此,仍然要去查找枚举并处理以下缺点: 1。手动维护类别/资金/角色表和枚举(在没有代码生成的情况下) 2.重新编译应用程序以更改类别/资金/角色。 – Matthew 2009-06-21 05:21:04