對不起,如果這是一個愚蠢的問題,但我似乎無法控制。NHibernate繼承從父類創建子對象
我有2個班,Customer
和Member
。
Customer.cs
public class Customer
{
public virtual string Firstname { get; set; }
public virtual string Middlename { get; set; }
public virtual string Lastname { get; set; }
}
Member.cs
public class Member : Customer
{
public virtual string MemberId { get; set; }
public virtual string MemberRegistrationDate { get; set; }
public virtual string MembershipStatus { get; set; }
public Member()
{
MemberRegistrationDate = DateTime.Now;
MembershipStatus = MembershipStatusEnum.Active;
}
}
我敢肯定,這必須是一個繼承,其中各會員是客戶,雖然如果我絕望,我可以訴諸構圖。
請注意,在這裏我使用NHibernate,迫使我使用所有的虛擬。
給定一個客戶對象,應該如何從現有客戶的新成員?
我能想到的2個選項在這裏:
1 - 使用Member.cs構造函數來創建它的父母性能
這是一件好事呢?我試着這樣做:
public class Member : Customer
{
public virtual string MemberId { get; set; }
public virtual string MemberRegistrationDate { get; set; }
public virtual string MembershipStatus { get; set; }
public Member(Customer customer)
{
Firstname = customer.Firstname;
Middlename = customer.Middlename;
Lastname = customer.Lastname;
MemberRegistrationDate = DateTime.Now;
MembershipStatus = MembershipStatusEnum.Active;
}
}
但ReSharper的警告我,在構造函數中,這點我同意,避免訪問虛擬成員,並告訴我,使會員不能有虛擬成員密封類(無NHibernate的兼容性)。
當有一天我向Customer類添加了一個新屬性時,它也引發了另一個問題,我忘了對Member構造函數做同樣的事情。
2 - 使用某種反射助手來映射兩個對象。
確定這是一個可行的選擇,但我目前瞭解DDD,我想知道是否可以將這樣的助手放在域圖層中?
需要一些建議,謝謝!
你想做什麼?我不完全明白你的問題。 「註冊」是什麼意思? (這不是OOP常用的術語......) –
@ThomasWeller抱歉不清楚。最接近的含義是從現有的Customer(父)對象創建一個新的Member(child)對象,並將所有現有的父屬性複製到子節點 –
@ThomasWeller編輯了這個問題,謝謝你的領導:) –