[英]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.