假设我有一个名为“Tenant and Customer”的抽象类。在这种情况下,租户就像多租户应用模型的应用程序的所有者
这两个阶级之间的关系是多对一的关系。
public abstract class Tenant
{
protected Int32 id;
protected String name;
public Int32 ID { get; set; }
public String Name { get; set; }
public abstract bool Add();
public abstract bool Update();
public abstract bool Delete();
}
public class ApplicationTenant: Tenant
{
public ApplicationTenant() { }
public override Int64 ID
{
get { return id; }
set { id = value; }
}
public override String Name
{
get { return name; }
set { name= value; }
}
...
}
public abstract class Customer
{
protected Int32 id;
protected String name;
protected Tenant tenant;
public Int32 ID { get; set; }
public String Name { get; set; }
public Tenant Tenant { get; set; }
public abstract bool Add();
public abstract bool Update();
public abstract bool Delete();
}
public class CorporateCustomer : Customer
{
public CorporateCustomer () { }
public override Int64 ID
{
get { return id; }
set { id = value; }
}
public override String Name
{
get { return name; }
set { name= value; }
}
public override Tenant Tenant
{
get { return tenant; }
set { tenant= value; }
}
...
}
这种设计的问题在于:当你这样做时:
CorporateCustomer customer = new CorporateCustomer();
customer.Tenant.ID = xx
在这种情况下,租户总是引用公共租户租户{get;组;实际上我想要的是来自ApplicationTenant的那个而不是一个抽象的那个。
如果它与其他对象有关,我应该删除此类Customer中的任何抽象吗?你的想法是什么?
答案 0 :(得分:1)
您是否想要访问具体实现ApplicationTenant属性而不仅仅是获取租户抽象类?如果您确定承租人是ApplicationTenant类型,您可以投下它,即
ApplicationTenant appTenant = (ApplicationTenant)customer.Tenant;
然后使用ApplicationTenant的功能。
答案 1 :(得分:1)
或在您的Customer类中使用泛型。
public abstract class Customer<TTenant> where TTenant: Tenant
{
protected Int32 id;
protected String name;
protected TTenant tenant;
public Int32 ID { get; set; }
public String Name { get; set; }
public TTenant Tenant { get; set; }
public abstract bool Add();
public abstract bool Update();
public abstract bool Delete();
}