我的问题有点与这个问题 https://stackoverflow.com/questions/25163478/create-an-instance-of-derived-class-from-the-base-class但更具体一点。
我有一个域对象Customer
看起来像这样:
public class Customer : Party
{
public Identity Identity {get; protected set;}
public bool IsOrganization {get; set;}
}
和身份看起来像这样:
public class Identity : PersistableModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleInitial { get; set; }
public string Title { get; set; }
public string BusinessName { get; set; }
public string LegalName { get; set; }
public bool IsSynchronized { get; private set; }
}
public abstract class PersistableModel : IPersistableModel
{
public const long UnassignedId = 0;
public static readonly DateTime MinimumDateTime = new DateTime(1900, 1, 1);
private readonly List<string> modifiedProperties = new List<string>();
public virtual ModelState State { get; set; }
public IEnumerable<string> ModifiedProperties { get { return modifiedProperties; } }
protected bool HasModifiedProperties { get { return 0 < modifiedProperties.Count; } }
public bool WasModified(string propertyName)
{
return modifiedProperties.Contains(propertyName);
}
public void WasModified(string propertyName, bool modified)
{
if (modified)
{
if (!WasModified(propertyName)) modifiedProperties.Add(propertyName);
}
else
{
modifiedProperties.Remove(propertyName);
}
}
public virtual void OnPersisting()
{
}
public abstract void Accept(Breadcrumb breadcrumb, IModelVisitor visitor);
}
现在,根据 IsOrganization 的值,Identity 中的一些逻辑需要更改,特别是如果 IsOrganization 为 true,则个人相关字段(名字、姓氏等)需要返回 null,当为 false 时,Organization 字段需要返回 null返回空值。
以前,这是通过客户的不同实现来完成的,这些实现将在其构造函数中将身份初始化为不同的基类,但是我正在进行的更改需要删除这两种客户类型的类分离。
我的想法是 Identity 属性看起来像这样:
public override Identity Identity
{
get
{
if (IsOrganization)
{
return OrgnaizationIdentity.FromIdentity(base.Identity);
}
else
{
return IndividualIdentity.FromIdentity(base.Identity);
}
}
}
From Identity 方法如下所示:
public static OrgnaizationIdentity FromIdentity(Identity identity)
{
return new OrgnaizationIdentity
{
FirstName = identity.FirstName,
LastName = identity.LastName,
MiddleNameInitial = identity.MiddleNameInitial,
Title = identity.Title
};
}
这里的问题是原始身份对象也有一些需要返回的私有字段。
所以我的问题是,是否有一种可以接受的方式来做这样的事情?