質問
「テナント」と「顧客」という抽象クラスがあるとします。この場合のテナントは、マルチテナントアプリケーションモデルのアプリケーションの所有者のようなものです
これら2つのクラス間の関係は、多対1の関係です。
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が他のオブジェクトに関連している場合、このクラスの抽象化を削除すべきですか?あなたの考えは?
解決
または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();
}
他のヒント
単にテナントの抽象クラスを取得するのではなく、具体的な実装ApplicationTenantプロパティにアクセスすることを意味しますか?テナントのタイプがApplicationTenantであることが確実な場合、キャストすることができます。つまり、
ApplicationTenant appTenant = (ApplicationTenant)customer.Tenant;
次にApplicationTenantの機能を使用します。
所属していません StackOverflow