【发布时间】:2013-07-18 15:34:50
【问题描述】:
我最近(几个月前)换了工作,并继承了一个代码库,该代码库尽可能多次违反 SOLID 原则。似乎编写此代码的人决定详细研究每一个良好的编码实践,并尽可能频繁、最彻底地违反它们。
我是该产品的唯一开发人员 - 组织中没有人知道代码,而且代码库太大而复杂,无法完全重写。我正在研究我可以做出的最高价值的改变,以使代码库变得灵活和健壮。放弃这个产品也不是一种选择。
产品中所有问题的根源都源于一组核心业务逻辑数据结构的类。这些类有很多问题,但我真正感兴趣的是以下几点:
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);
}
}
}
}
为了简洁起见,我从这个类中剪掉了很多其他方法。
如您所见,围绕这个类存在大量问题(在静态类中存储状态是一种巨大的代码异味 - 围绕该类编写整个应用程序简直太疯狂了)。
我目前的意图是将这个类重构为一个适当的单例类(并最终成为一个常规类,以便我可以让用户同时打开多个文档)。
我应该这样做吗?
进行此更改的最大风险是什么?我可以采取任何方法来降低进行此更改的风险吗?
【问题讨论】:
-
从整个类中删除 static 关键字并重建项目。你会得到错误。修复这些,它是安全的。
-
我没有任何提示,但我忍不住注意到你的头像和你的问题一样。
-
我的默认头像是我的头像,与本站无关。所以我把我的头像改成了我的想法,就是这段代码。
标签: c# .net architecture