在这个问题中,我将询问基本实践。今天我遇到了需要使用此代码更新数据库表值的情况。
public void updateUsrProfileName(string usrId, string name)
{
query = "update [db_user].[dbo].[usr_profiles] set [Name]=@name where [usrid]=@usrid ";
try
{
com = new SqlCommand(query,con);
com.Parameters.AddWithValue("@name",name);
com.Parameters.AddWithValue("@usrid",usrId);
con.Open();
com.ExecuteNonQuery();
con.Close();
}
catch (Exception e)
{
con.Close();
throw e;
}
}
我需要为表的每一列重复上面的函数,所以我想出了一个减少代码的常用函数
public void Commonfunction(SqlCommand com, string var)
{
try
{
com.Parameters.AddWithValue("@usrid", var);
con.Open();
com.ExecuteNonQuery();
con.Close();
}
catch (Exception e)
{
con.Close();
throw e;
}
}
并调用上面的函数
public void updateUsrProfileName(string usrId, string name)
{
query = "update [db_user].[dbo].[usr_profiles] set [Name]=@name where [usrid]=@usrid ";
try
{
com = new SqlCommand(query,con);
com.Parameters.AddWithValue("@name",name);
Commonfunction(SqlCommand com, string name);
}
catch (Exception e)
{
con.Close();
throw e;
}
}
优势: - 清洁代码没有冗余。 代码长度越少,差异就越小
缺点: - 由于函数调用没有增加性能,因为它需要匹配参数,映射函数调用等
在这种情况下,代码很少是冗余的,使用通用功能移动是好的,在哪种条件下我们应该考虑功能的划分。
答案 0 :(得分:0)
始终"移动它" (对于共享方法而不是重复代码)。直到不太可能的情况下,分析显示您在该区域存在问题。
答案 1 :(得分:0)
将一些通用逻辑放在单独的方法中是个好主意。我通过删除过多的try / catch块并添加了finally
子句来简化代码。
public void Commonfunction(SqlCommand com, string var)
{
try
{
com.Parameters.AddWithValue("@usrid", var);
con.Open();
com.ExecuteNonQuery();
}
finally
{
if (con != null)
{
con.Dispose();
}
}
}
public void updateUsrProfileName(string usrId, string name)
{
query = "update [db_user].[dbo].[usr_profiles] set [Name]=@name where [usrid]=@usrid ";
com = new SqlCommand(query, con);
com.Parameters.AddWithValue("@name", name);
Commonfunction(com, name);
}