2017-09-15 77 views
0

我正在尋找一種靈活/通用的方法來使用存儲在數據庫中的元數據來構建條件,然後在運行時驗證傳入的請求 中的條件和連接值(如果條件得到滿足。動態生成連接的IF語句

我的使用情況看起來是這樣的:

1)業務用戶從UI即(選擇操作IF從下拉狀態),然後選擇一個appropraite現場評估,即(「語言」) 然後爲條件選擇一個值,即「Java」,後跟一些值以連接,即「Java 9」和「即將推出!」。

2)元數據將得到存儲在數據庫中(可以說是暫時["language","Java","Java 9","is coming soon"]
當我的應用程序開始我想建立適當的級聯條件列表),即:

private String concatenateString(String condition, String conditionValue, String concatValue1, String concatValue2){ 
     StringBuilder sb = new StringBuilder(); 
     if (condition.equals(conditionValue)){ 
      sb.append(concatValue1); 
      sb.append(concatValue2);  
     } 
     return sb.toString(); 
    } 

3)所以在運行時,當我receieve的請求,我想的價值觀在我的傳入請求到得到了在建的各種條件比較啓動:

if language == "Java" then the output would look like => "Java 9 is coming soon" 

雖然上面可能會爲2串濃度工作對於可變數量的條件和級聯值,如何實現相同的匹配值。

回答

0

因此,您希望用戶通過從GUI中選擇將存儲在數據庫中的選項來創建程序。當從數據庫中讀回選項時,您想將其解析爲可編譯的程序並運行它?

使用StringBuilder構建從數據庫得到回數據的代碼,像這樣的字符串:

「如果(語言==‘的‘Java’’){DoSomething的()}」(你如果你要在字符串中存儲字符串,需要注意在字符串內部存在字符串。

然後你可以使用Compiler類將字符串編譯成一個你可以運行的程序(所有在運行時,google動態編譯c#在運行時)

但是,你可能想問你爲什麼想要沿着這條路線走下去......我一直在那裏befo re,動態編譯有一個非常狹窄的用例。

你可以,例如,創造出選擇的語言映射到一些輸出字符串,並簡單地使用它來獲取像你輸出詞典:

Dictionary<string, string> langaugeOutputMap = new Dictionary<string, string>(); 
languageOutputMap.Put("Java", "Java9 is coming soon"); 

private string concatString(string: userChosenString) { 
    if (languageOutputMap.containsKey(userChosenString) { 
     return languageOutputMap.getValue(userChosenString); 
    } 
    return string.Empty() 
} 

然後,如果您要管理多個條件,你可以有爲每個條件類型提供多個詞典,並將它們列舉在一個集合中,當給定一個可變大小的條件集時迭代它們並確保所有條件通過使用containsKey()來評估。

此外,您還可以使用params指定像這樣可變長度的函數參數:

公共字符串manyArgs(PARAMS字符串[] stringArgs){

}

而且,看PredicateBuilder:

http://www.albahari.com/nutshell/predicatebuilder.aspx

+0

是的,基本上是一個商業用戶將建立各種不同的條件和合作並將它們存儲在數據庫中。我需要在運行時使用這些條件來確定我需要連接的值。也許你是對的,動態編譯路線不是要走的路。只是想看看我的選擇! – Orby