2013-11-28 3 views
-1

이 질문에서 저는 기본 관행에 대해 물어볼 것입니다. 오늘 나는이 코드로 데이터베이스 테이블 값을 업데이트해야하는 상황에 직면했다.깨끗한 기능 코드 또는 많은 코드 덩어리

public void updateUsrProfileName(string usrId, string name) 
    { 
     query = "update [db_user].[dbo].[usr_profiles] set [Name][email protected] where [usrid][email protected] "; 
     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][email protected] where [usrid][email protected] "; 
     try 
     { 
      com = new SqlCommand(query,con); 
      com.Parameters.AddWithValue("@name",name); 
      Commonfunction(SqlCommand com, string name); 
     } 
      catch (Exception e) 
      { 
       con.Close(); 
       throw e; 
      } 
     } 

같은 기능 이상 전화를 하나 개의 공통 기능을 마련 장점 : - 중복 코드가없는 깨끗한 코드.

단점 차이가 매우 적은 적은 코드 길이 : - 함수의 어떤으로 호출은 매우 적은 코드가 어디 있는지지도 기능은이 상황에서 등

호출, 성능이 인수와 일치해야함에 따라 감소 증가 이중화는 공통 함수로 이동하는 것이 좋으며 어떤 조건에서는 함수를 나누는 것에 대해 생각해야한다.

+1

전체 레코드를 업데이트하십시오. 'updateUserProfile (UserProfile profile)'함수 하나만 작성하십시오. – sbenitezb

+0

나는 리소스의 낭비가있을 것만 같아서 이름을 업데이트해야하는 이유가 성능에 영향을 미치는 전체 행으로 이동해야하는 이유는 무엇입니까? –

+0

초당 사용자 프로필을 얼마나 자주 업데이트하고 있습니까? 한 번도, 나는 추측 할 것이다. – sbenitezb

답변

0

항상 코드를 반복하는 것이 아니라 공유 방법으로 "이동"하십시오. 드물게 프로파일 링이 그 영역에서 문제가 있음을 보여줄 때까지

+0

무엇보다 성능 문제가 .. –

+0

어떤 성능 문제가 있습니까? 성능상의 문제가 있다고 주장하기 위해 측정 했습니까? 귀하의 데이터는 얼마나 큰가요? 얼마나 많은 업데이트가 있습니까? 가능한 한 간단하게 코드를 작성하고 성능을 측정 한 다음 실제로 필요하면 조정할 것입니다. 그렇지 않으면 전혀 이유없이 복제 된 코드로 끝납니다. – sbenitezb

+1

코드를 올바르게 작성하는 대신 코드를 복제하면 성능상의 문제가 거의 해결되지 않습니다. – John3136

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][email protected] where [usrid][email protected] "; 

    com = new SqlCommand(query, con); 
    com.Parameters.AddWithValue("@name", name); 
    Commonfunction(com, name); 
} 
+0

kirill 내가 (문자열 usrId, 문자열 이름) updateUsrProfileName에서 캐치를 제거하면 비즈니스 로직 호출자에게 예외를 던질 것입니다 의심의 여지가있다. –

+1

예외를 잡아 내지 않으면 예외가 호출 스택에 전파됩니다. – sbenitezb

+0

@HotCoolStud, 소스 코드에서'catch' 블록에서 예외를 rethrow ... –