簡體   English   中英

高級C#重構

[英]Advanced C# Refactoring

作為國際化工作的一部分,在格式化SQL查詢時string.Format(CultureInfo.InvariantCulture, ...)需要重構string.Format(...)用法以使用string.Format(CultureInfo.InvariantCulture, ...)選項。 這是為了確保代碼在各種語言文化環境下運行時將繼續生成有效的SQL。 在其他情況下,例如,當格式化UI的字符串時, string.Format(...)用法應保持不變。

例如,以下代碼將需要更新以使用string.Format(CultureInfo.InvariantCulture, ...)

string sql;

if(somethign) 
{
    sql = string.Format("SELECT {0} FROM {1}", column, table);
}
else 
{
    sql = string.Format("SELECT {0} FROM {1}", column2, table2);
}

db.Query(sql);

不幸的是,這種數據庫訪問模式已在代碼庫中使用了數千次,並且沒有可以想到的簡單查找和替換命令。 任何查找和替換方法都需要足夠先進,以僅隔離將結果字符串用作db.Query()參數的情況。

我目前正在考慮的一些想法包括Resharper的Search with Pattern(我從未使用過),編寫基於Roslyn的工具來智能地重構代碼(似乎有些復雜)或Unix命令行工具的某種組合。

我也願意接受其他更重要的重構方法,只要它們可以在很大程度上實現自動化即可。

進行此代碼國際化的推薦方法是什么?

您可以使用C#的字符串插值。 因此查詢將如下所示:

sql = $"SELECT {column} FROM {table}";

我認為字符串插值的默認值為當前文化。

另一方面,我仍然不建議在代碼中構造查詢,因為它很容易受到SQL注入的攻擊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM