c# - 如何重构在字典中存储大量 SqlCommand 的大类

标签 c# architecture refactoring data-access-layer legacy-code

我最近开始重构一个由在 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/

相关文章:

c# - Gridview on Linkbutton click,将完整的Grid Row信息传递到下一页?最好的方法是什么?

Azure Function 自定义 API 身份验证

java - 如何从循环中删除 if else 条件?

c# - 如何在 C# 中创建只读对象属性?

c# - 远程服务器在谷歌翻译中返回错误 : (503) Server Unavailable.

javascript - Ajax 架构 - MVC?其他?

asp.net-mvc - 不传递实体以查看的好处

java - 如何重构方法以使其更易于测试

c# - 自动重构代码以避免无参数构造函数

c# - 构建docker镜像的问题,RUN dotnet restore : "No such host is known" in VS2019, Windows