我有一个通用格式的文本文件:
ThreadID, MethodName, [Param1 | Param2 | ... ]
我有一个实用程序类,如下所示:
public static class Util
{
public static List<double> Foo(List<double> Source, double Scale)
{
List<double> l = new List<double>(Source);
for (int i = 0; i < l.Count; i++)
{
l[i] = l[i] * Scale;
}
return l;
}
public static void Fud(List<double> Source, string Name)
{
//... Chart Series
}
public static bool Fee(CustomClass MyClass, double Limit1, int Limit2)
{
//... Test MyClass values against input limits
return true; // false;
}
}
所以我使用了一个开关/案例,它给出了文本文件中的方法名称,然后解析并将参数传递给案例中的方法。sudo 代码的效果是:
static void Main(string[] args)
{
List<string> TextFile;
List<double>[] Register = new List<double>[3]; //lists containing data that is moved, mutated and converted to CustomClass
CustomClass MyClass = new CustomClass();
bool Passed = false;
foreach (var line in TextFile)
{
string methodName = Util.ParseMethod(line); //parsed from file
string param1, param2, param3, param4 = Util.ParseParams(line); //parsed from file
switch (methodName)
{
case "Foo":
Register[param1] = Util.Foo(Register[param2], param3);
break;
case "Fud":
Util.Fud(Register[param1], param3);
break;
case "Fee":
Passed = Util.Foo(MyClass, param1, param2);
break;
}
}
}
我不喜欢拆分逻辑,每次开发新的实用程序方法时,我都必须手动添加另一个案例语句。case 语句变得难以维护,因为设计时错误(字符串/更新中的拼写错误)通常只在运行时被捕获。
我试图将这一切转换为工厂架构,但我似乎无法适应不同的方法定义。我希望取消 Utility 类并使用工厂接口在它自己的类中定义每个方法。
public interface IRecipe
{
string GetFactoryKey();
string SerializeArgs(object[] args);
object[] DeserializeArgs(string args);
??? DoWork(???);
}
问题是由于实用程序类中的每个方法有多么不同,我找不到在接口中正确定义它的方法。我想要的最终结果是我可以用通用代码替换 foreach 循环中的开关,并且在实现工厂接口而不是方法调用者的每个类中定义所有细节逻辑、解析、方法定义、错误检查和验证. 我已经用完了谷歌的东西,因为我什至不知道我想要做什么。