试图避免类结构中的多个子类型

本文关键字:类型 结构 | 更新日期: 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; }
}

试图避免类结构中的多个子类型

您可能更喜欢组合而不是继承BusinessPerson类"具有"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属性。