我有两种自定义类型Customer
,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 方法,我如何控制它而无需复制和粘贴相同的代码?对要在每个类中创建的类型进行编码对我来说似乎不是一个好的解决方案。Employee 和 Customer 在逻辑上也没有使用继承的意义。像这样的事情有什么合适的解决方案?
工厂:
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;
}
}
}