我試圖建立一個文檔管理系統,儘管我已經閱讀過有關實體,值對象,如何選擇如何映射它們等信息。 ..我仍然無法弄清楚「正確」的方式是什麼。非常典型地在這樣的之情況,每個文檔都可以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