试图避免类结构中的多个子类型
本文关键字:类型 结构 | 更新日期: 2023-09-27 18:25:47
我有两个抽象类Business&人问题是,我有一个客户类型,可以是企业,也可以是个人。有没有一种方法可以对此进行建模,这样我就不会同时拥有CustomerBusiness和CustomerPerson类?多重继承不是一个选项,因为这是C#。我看这个太久了,看不见森林里的树。
public abstract class Business {
public string Name { get; set; }
}
public abstract class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public DateTime? BirthDate { get; set; }
public string Comments { get; set; }
}
public class CustomerBusiness : Business, CustomerRoles {
public bool BillTo { get; set; }
public bool ShipTo { get; set; }
public bool DeliverTo { get; set; }
public EntityType Type { get; set; }
}
public class CustomerPerson : Person, CustomerRoles {
public bool BillTo { get; set; }
public bool ShipTo { get; set; }
public bool DeliverTo { get; set; }
public EntityType Type { get; set; }
}
public interface CustomerRoles {
bool BillTo { get; set; }
bool ShipTo { get; set; }
bool DeliverTo { get; set; }
}
您可能更喜欢组合而不是继承Business
和Person
类"具有"ICustomerRoles
而不是"是"ICustomerRoles
。
public class Business
{
public string Name { get; set; }
public ICustomerRoles CustomerRoles { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public DateTime? BirthDate { get; set; }
public string Comments { get; set; }
public ICustomerRoles CustomerRoles { get; set; }
}
我想说你的继承权顺序不对。Customer应该是基类,然后Business和Person应该是Customer类的实现。我确信,除了CustomerRoles界面中的属性之外,所有类型的Customer都有更多共同的Customer属性。
我本以为会有像CustomerCode之类的东西。此外,您可以声明所有客户都有一个Name属性,并且由每个子类中的getter返回适当的值。在企业中,将有一个名为Name的属性,而一个人将有FirstName、MiddleName、Surname中的每一个,以及一个以某种方式连接这些属性的Name属性。