我最近开始重构由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,该存储库将由服务使用并且可以注入依赖项。
我真的不在乎更改功能或查询(例如使用ORM)。我更感兴趣的是以一种允许我更轻松地模拟,测试和修改文件的方式将文件拆分为多个文件。尽管我知道需要大量复制/粘贴和重新编码,但我正在寻找一种更好地构造现有代码的方法。
最佳答案
建议使用诸如NHibernate之类的对象关系映射器替换手动编写的对象映射代码,这将节省创建和维护数据访问层的时间和精力。