我在通用格式的文本文件:讀配方來控制數據處理步驟
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;
}
}
所以我使用的是開關/案例從文本文件中給出方法名稱,然後解析並將參數傳遞給案例中的方法。須藤代碼爲東西的效果:
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語句。 case語句變得難以維護,因爲設計時錯誤(字符串/更新中的拼寫錯誤)通常只在運行時被捕獲。
我試圖將這一切轉換爲工廠架構,但我似乎無法適應不同的方法定義。我希望取消Utility類並使用工廠界面在其自己的類中定義每個方法。
public interface IRecipe
{
string GetFactoryKey();
string SerializeArgs(object[] args);
object[] DeserializeArgs(string args);
??? DoWork(???);
}
的問題是,因爲如何不同每種方法在實用類是,我不能找到一種方法,在適當的接口定義它。我想要的最終結果是我可以用泛型代碼替換foreach循環中的開關,並且在實現工廠接口的每個類中定義所有基本邏輯,解析,方法定義,錯誤檢查和驗證,而不是方法調用方。我已經用盡了谷歌的東西,因爲我不知道我想要做什麼甚至叫。
是的,我開始朝這個方向前進,但是因爲我想通過基於索引的列表而不僅僅是某些方法的索引值本身,所以我需要傳遞對象數組的靈活性。儘管我可以通過類屬性傳遞複雜的對象,並通過字符串傳遞參數,但確實讓我思考。那麼我可能做'T DoWork (string params)',當我用factory'(foo)object = Factory.Step (key);'如果這可以工作,那麼可以在上面的位也可以使用反射通用? –
HodlDwon
是否需要偶爾從DoWork方法返回某些內容?似乎任何錯誤處理都將在DoWork方法本身內解決。然後,您可以通過列表
是的,我確實需要傳入和傳出DoWork()方法的東西。我發佈了我的概念證明,它可以編譯和工作,但隨時可以提供更多的反饋:) – HodlDwon