Допустим, у меня есть абстрактный класс: 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, если она связана с другими объектами? О чем ты думаешь?