更好地清理功能代码或大块代码

时间:2013-11-28 04:38:54

标签: sql database performance function c#-4.0

在这个问题中,我将询问基本实践。今天我遇到了需要使用此代码更新数据库表值的情况。

   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;
             }
         }

优势: - 清洁代码没有冗余。 代码长度越少,差异就越小

缺点: - 由于函数调用没有增加性能,因为它需要匹配参数,映射函数调用等

在这种情况下,代码很少是冗余的,使用通用功能移动是好的,在哪种条件下我们应该考虑功能的划分。

2 个答案:

答案 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);
}