我最近开始重构一个由在 OOP 方面经验不足的人设计的旧系统。值得庆幸的是,(几乎)所有对数据库的访问都在一个 3000 行长的文件中。该文件包含 Dictionary<string, SqlCommand>
, SqlConnection
,一个非常长的函数,将每个 SQL 查询添加到字典中,如下所示:
cmd = new SqlCommand(null, _sqlConnection);
cmd.CommanText = "SELECT * FROM User WHERE User.UserID = @id;" // Most queries are far from being this simple
cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.Int, 0));
cmd.Prepare();
_cmds.Add("getUser", cmd);
这些查询由同一文件中的函数使用,如下所示:
public void deleteUser(int userId)
{
if (_cmds.TryGetValue("deleteUser", out SqlCommand cmd))
{
lock(cmd)
{
cmd.Parameters[0].Value = userId;
cmd.ExecuteNonQuery();
}
}
}
public int isConnected(int userId, out int amount)
{
bool result = false;
amount = 0;
if (_cmds.TryGetValue("userInfo", out SqlCommand cmd))
{
lock (cmd)
{
cmd.Parameters[0].Value = userId;
using (SqlDataReader reader = new cmd.ExecuteReader())
{
if (reader.HasRows)
while (reader.Read())
{
amount = (int)Math.Round(reader.GetDecimal(0));
result = reader.GetInt32(1);
}
}
}
}
return result;
}
现在使用和维护它都非常糟糕。我终于有时间重构这个了。我想把它变成一个适当的 DAL,带有存储库,服务可以使用它并且可以依赖注入(inject)。
我不太关心更改函数或查询(例如使用 ORM)。我更感兴趣的是将文件拆分为多个文件,这样我就可以更轻松地模拟、测试和修改它。我正在寻找一种更好地构建现有代码的方法,尽管我知道需要进行大量复制/粘贴和重新编码。
最佳答案
建议使用像 NHibernate 这样的对象关系映射器来替换手动编写的对象映射代码。 ,这将节省创建和维护数据访问层的时间和精力。
关于c# - 如何重构在字典中存储大量 SqlCommand 的大类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56188752/