2012-06-08 70 views
2

使用POCO和流利的NHibernate,我想有能力拿一個像User這樣的對象並且能夠賦予它不同的屬性。我希望這些對象能夠專注於它們的屬性,而不是常見屬性。目前,我有一個AuditableEntity,可以從中派生出來讓我的實體擁有像CreatedDateTime和ModifiedDateTime這樣的Audited屬性,但是我也希望能夠爲每個對象實現我的ID,Id應該能夠成爲其他基礎對象的一部分,所以我可以說這個對象有一個Guid Id,而且這個對象有一個int id,而這個id沒有。目前,我的用戶對象是這樣的:流利的NHibernate裝飾實體

User.cs

namespace ZeroBase.Domain.Entities 
{ 
public class User : AuditableEntity<User> 
{ 
    public virtual Guid Id { get; set; } 
    public virtual string Username { get; set; } 
    public virtual string Password { get; set; } 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
    public virtual string EmailAddress { get; set; } 
    public virtual IEnumerable<Comment> Comments { get; set; } 
} 
} 

和我的用戶映射是這樣的:

UserMap.cs

namespace ZeroBase.Infrastructure.Data 
{ 
public class UserMap : AuditMap<User> 
{ 
    public UserMap() 
    { 
     Id(x => x.Id) 
      .Column("Id") 
      .GeneratedBy.Guid(); 
     Map(x => x.Username); 
     Map(x => x.Password); 
     Map(x => x.FirstName); 
     Map(x => x.LastName); 
     Map(x => x.EmailAddress); 
     HasMany(x => x.Comments); 
     Table("Users"); 
    } 
} 
} 

反正是有處理在某種通用基類中創建Id,並且仍然有一個單獨的類,對象可以繼承它以成爲可審計的?

回答

2

您是否使用AuditableEntity上課沒有ID? Entity意味着班級有一個身份。基於此,我想說你可以添加一個Id屬性到AuditableEntity。

如果您使用的是它的類沒有一個身份,像值對象,我會創造另一個基類。這樣的事情會有意義嗎?

class Entity { 
    Guid Id { get; set; } 

    public Entity() { 
     Id = Guid.NewGuid(); 
    } 
} 

interface IAuditable<T> { 
    DateTime CreatedAt {get; set; } 
    // ... 
} 

class AuditableEntity<T> : Entity, IAuditable<T> { 
    DateTime CreatedAt { get; set; } 
} 

class AuditableValueObject<T> : IAuditable<T> { 
    DateTime CreatedAt { get; set; } 
} 

// Class that has both an identity and is auditable 
class User : AuditableEntity<User> { 
    // .. 
} 

// Class without an identity but auditable 
class Money : AuditableValueObject<Money> { 
    // .. 
} 

// Class with an identity but not auditable 
class Customer : Entity { 
    // .. 
} 

注:實體,值對象等是Domain Driven Design(DDD)條款。

+0

這樣做!謝謝您的幫助! –

相關問題