【发布时间】:2013-10-15 22:37:22
【问题描述】:
如果这是一个愚蠢的问题,我很抱歉,但我似乎无法掌握。
我有 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;
}
}
我很确定这必须是一个继承,其中 Member 是一个客户,但如果我很绝望,我可以求助于组合。
请注意,这里我使用的是 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 警告我关于在构造函数中访问虚拟成员,我同意避免这种情况,并告诉我将 Member 设为不能具有虚拟成员的密封类(不兼容 NHibernate)。
当有一天我向 Customer 类添加了一个新属性,而我忘记对 Member 构造函数做同样的事情时,这也引发了另一个问题。
2 - 使用某种反射助手在两个对象之间进行映射。
当然这是一个可行的选择,但我目前正在学习 DDD,我想知道是否可以将这样的助手放在域层中?
需要一些建议,谢谢!
【问题讨论】:
-
你想做什么?我不太明白你的问题。 “注册”是什么意思? (这不是OOP中常用的术语...)
-
@ThomasWeller 很抱歉不清楚。最接近的含义是从现有的客户(父)对象创建一个新的成员(子)对象,并将所有现有父属性复制到子对象
-
@ThomasWeller 编辑了问题,感谢您的提醒 :)
-
哦,这是否意味着:您有一个客户,并且您想从中创建一个新成员(“将客户转变为成员”),同时为附加属性提供一些默认值?跨度>
标签: c# oop nhibernate inheritance fluent-nhibernate