Вчера я задал вопрос относительно использования либо отражения, либо шаблона стратегии для динамически вызывающих методов.
Однако с тех пор я решил изменить методы на отдельные классы, реализующие общий интерфейс. Причина в том, что каждый класс, хотя и имеет некоторые сходства, также выполняет определенные методы, уникальные для этого класса.
Я использовал стратегию как таковую:
switch (method)
{
case "Pivot":
return new Pivot(originalData);
case "GroupBy":
return new GroupBy(originalData);
case "Standard deviation":
return new StandardDeviation(originalData);
case "% phospho PRAS Protein":
return new PhosphoPRASPercentage(originalData);
case "AveragePPPperTreatment":
return new AveragePPPperTreatment(originalData);
case "AvgPPPNControl":
return new AvgPPPNControl(originalData);
case "PercentageInhibition":
return new PercentageInhibition(originalData);
default:
throw new Exception("ERROR: Method " + method + " does not exist.");
}
Однако, по мере роста числа потенциальных классов, мне нужно будет добавлять новые, тем самым нарушая правило закрытых для модификации.
Вместо этого я использовал решение как таковое:
var test = Activator.CreateInstance(null, "MBDDXDataViews."+ _class);
ICalculation instance = (ICalculation)test.Unwrap();
return instance;
Фактически параметр _class - это имя класса, переданного во время выполнения. Это общий способ сделать это, будут ли какие-либо проблемы с производительностью?
Я новичок в размышлениях, поэтому ваш совет будет приветствоваться.