インターフェイスを実装する2 つのカスタム タイプがCustomer
あります。このインターフェイスには、それを実装するオブジェクトのプロパティ名の文字列のリストを返すメソッドが 1 つだけあります。次のようなWebサービスがあります。Employee
ITablefy
GetPropertyList
public string ReturnPropertyNames(ITablefy i)
{
List<string> propList = new List<string>();
TableFactory factory = new TableFactory();
ITablefy table = factory.CreateTable(i);
propList = table.GetPropertyList(table);
return propList[1];
}
したがって、この例では、ファクトリは実装する具象型を作成しますITablefy
Customer
クラスとEmployee
GetPropertyList メソッドをまったく同じに実装したときに問題が発生したときに気付きました。
//property list is a private member variable in each class
public List<string> GetPropertyList(ITablefy i)
{
TableFactory factory = new TableFactory();
ITablefy table = factory.CreateTable(i);
foreach (var propInfo in table.GetType().GetProperties())
{
propertyList.Add(propInfo.Name);
}
return propertyList;
}
そのコードをコピーして貼り付けるのではなく、現在持っているものに対するより良い解決策を探しています。特定の型だけで GetPropertyList メソッドを使用したい場合、この同じコードをコピーして貼り付けることなく、どのように制御できますか? 各クラスで作成する型をハーコーディングすることは、私にとっては良い解決策とは思えません。従業員と顧客も、継承を使用することは論理的に意味がありません。このようなものの適切な解決策は何ですか?
工場:
public class TableFactory
{
public ITablefy CreateTable(ITablefy i)
{
if (i is Employee)
{
return new Employee();
}
else if (i is Customer)
{
return new Customer();
}
else
{
return null;
}
}
}