我最近(幾個月前)更改了作業並繼承了一個代碼庫,它違反了SOLID原則中的每一個原則,儘可能多次。看起來編寫這些代碼的人似乎決定詳細研究每一個好的編碼實踐,並儘可能經常地,最激進地違反它們。如何安全地將靜態類轉換爲C#中的實例化類#
我是該產品的唯一開發人員 - 組織中沒有人知道代碼和代碼庫太大又複雜,無法完全重寫。我正在研究可以使代碼庫靈活而強大的最高價值變化。放棄這種產品也不是一種選擇。
產品中所有問題的根源都來自於一組作爲核心業務邏輯數據結構的類。有很多的這些類的問題,但什麼我真正感興趣的是:
public static class NetCollection
{
private static Logger LogFile { get { return Logger.GetMethodLogger(2); } }
// Declare local variables.
private static Dictionary<string, NetObject> netObjectHashTable;
private static Dictionary<string, NetTitle> titlePropertyHashTable;
private static Dictionary<string, NetObject> referenceDataHashTable;
private static Dictionary<int, SortedDictionary<string, int>> picklistHashTable;
public static IEnumerable<NetObject> NetObjects
{
get
{
return netObjectHashTable.Values;
}
}
static NetCollection()
{
netObjectHashTable = new Dictionary<string, NetObject>();
titlePropertyHashTable = new Dictionary<string, NetTitle>();
referenceDataHashTable = new Dictionary<string, NetObject>();
picklistHashTable = new Dictionary<int, SortedDictionary<string, int>>();
}
public static void AddNetObject(NetObject newObject)
{
if (newObject == null)
return;
if (newObject.TitleType == "Reference Data")
{
// Check if hash table contains key
if (!referenceDataHashTable.ContainsKey(newObject.ID.ToString()))
{
referenceDataHashTable.Add(newObject.ID.ToString(), newObject);
}
}
else
{
// Check if hash table contains key
if (!netObjectHashTable.ContainsKey(newObject.ID.ToString()))
{
netObjectHashTable.Add(newObject.ID.ToString(), newObject);
}
}
}
}
我已經剪掉不少其他方法從這個類爲簡潔起見。如你所見,圍繞這個類有大量的問題(在靜態類中存儲狀態是一種巨大的代碼異味 - 在你的類中編寫你的整個應用程序只是瘋狂)。
我目前的意圖是將這個類重構成一個合適的單例類(最終成爲一個普通類,這樣我就可以讓用戶同時打開多個文檔)。
我應該這樣做嗎?
進行此更改最大的風險是什麼?我是否可以採取任何方法來降低進行此變更的風險?
從整個班級中刪除靜態關鍵字並重建項目。你會得到錯誤。修復這些,它是安全的。 – Ehsan
我沒有任何提示,但我不禁注意到你的頭像和你的問題一樣。 –
我的默認頭像是我的gravatar圖片,與本網站無關。所以我改變了我的頭像,就是這個代碼。 – Stephen