域模型:
public class Email: ValueObjectBase<Email>
{
private readonly string _address;
public Email(string address)
{
_address = address;
Validate(); //check RegX
}
}
public class FullName: ValueObjectBase<FullName>
{
private readonly string _firstName;
private readonly string _lastName;
public FullName(string firstName, string lastName)
{
_firstName = firstName;
_lastName = lastName;
this.Validate();
}
public string FirstName { get { return _firstName; } }
public string LastName { get { return _lastName; } }
}
public class Account : EntityBase<Guid>, IAggregateRoot
{
public virtual FullName FullName { get; set; }
public virtual Email Email { get; set; }
}
NHibernate的映射:
public class AccountMap : ClassMap<Account>
{
public AccountMap()
{
LazyLoad();
Id(c => c.Id).GeneratedBy.Assigned();
Component(c => c.FullName, m =>
{
m.Map(Reveal.Member<FullName>("_firstName")).Column("FirstName").Length(30).Not.Nullable();
m.Map(Reveal.Member<FullName>("_lastName")).Column("LastName").Length(40).Not.Nullable();
});
Component(c => c.Email, m => m.Map(Reveal.Member<Email>("_address")).Column("EmailAddress").Not.Nullable());
}
}
如果你認爲這是對數據層的任務,使用自定義類型... –
[VALUE的附表中可能的複製NHibernate上的對象](https://stackoverflow.com/questions/1331178/separate-table-for-value-objects-on-nhibernate) –