2014-10-20 4 views
0

세부 사항을 객체 일반적인 방법의 모습

public DataSet DataAdapter(CommandType cmdType, string cmdText, Parameters[] cmdParms) 
    { 

     DbDataAdapter dda = null; 
     try 
     { 
      EstablishFactoryConnection(); 
      dda = oFactory.CreateDataAdapter(); 
      PrepareCommand(false, cmdType, cmdText, cmdParms); 

      dda.SelectCommand = oCommand; 
      DataSet ds = new DataSet(); 
      dda.Fill(ds); 
      return ds; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      if (null != oCommand) 
       oCommand.Dispose(); 
      CloseFactoryConnection(); 
     } 
    } 

CloseFactoryConnection(); 방법은

public void CloseFactoryConnection() 
    { 
     //check for an open connection    
     try 
     { 
      if (oConnection.State == ConnectionState.Open) 
      { 
       oConnection.Close(); 
       oConnectionState = ConnectionState.Closed; 
      } 
     } 
     catch (DbException oDbErr) 
     { 
      //catch any SQL server data provider generated error messag 
      throw new Exception(oDbErr.Message); 
     } 
     catch (System.NullReferenceException oNullErr) 
     { 
      throw new Exception(oNullErr.Message); 
     } 
     finally 
     { 
      if (null != oConnection) 
       oConnection.Dispose(); 
     } 
    } 

아래 질문처럼 -이 클래스 (DBHelper)가 IOC 컨테이너 생성자이 주입 내 모든 저장소에 사용하고있다. 이 인스턴스의 라이프 스타일은 HttpContextLifecycle입니다. (이 라이프 스타일을 나타내는 Structuremap을 사용하면 HttpContext.Items 컬렉션에 인스턴스가 하나씩 저장된다는 의미입니다.)

DB 연결 클래스에 대한 라이프 스타일을 사용하고 있습니까?

연결을 생성하는 클래스/열기/닫기가 싱글 톤으로 인스턴스화되어야합니까? 또는 요청 당?

DB 연결 설정 클래스에서 일반적으로 받아 들여지는 라이프 스타일은 무엇입니까? 나는 ado.net을 사용 중이며 ORM도 없습니다. ADO.NET 이미 연결 풀링을 사용하기 때문에

감사

답변

2

, 캐시 필요/DbConnection 인스턴스를 다시 사용할 수는 없다. 이 점을 감안할 때 클래스는 단순히 코드를 작성하는 것보다 유용한 것을 추가하는 것으로 보이지 않습니다. 추상화하려는 것은 연결 문자열 뿐이며이를 구성 가능하게 (S) 처리하여 적절하게 처리합니다.

부가가치가 부족한 것 외에도 수업에 다른 문제가 있습니다. 잡아 NullReferenceException 큰 노 - 아니 - NullReferenceException 코드에 심각한 버그를 나타냅니다 및 충돌을 조사하여 해결해야합니다, 다른 예외로 래핑하여 (및 랩핑 할 때 사용하지 마십시오 Exception, 지정되지 않은 때문에 고객은 모든 것을 포착하지 않고 그것을 잡지 못합니다. 또 다른 나쁜 일입니다.) 더 좋은 방법은 물론, 그것은 적절 null를 확인하여 방지해야 클래스 아마 유용하지 왜

가 확인하려면 (What is a NullReferenceException, and how do I fix it? 참조) CloseFactoryConnection이 기능의 손실없이 다음에 간단하게 할 수 있다고 생각 :

public void CloseFactoryConnection() { 
    using (oConnection) { } 
} 

그래서 귀하의 질문에 다양한 대답을합니다 : 당신이 ORM을 사용하지 않는 경우, 당신은 아마 당신이 이미 가지고 사람을 넘어, 모두에서 데이터베이스 연결을 설정하기위한 클래스를 원하지 않는다. 데이터를 얻기 위해 의존성 주입을 사용하려면이 레벨에서 사용하지 말고 객체 레벨에서 사용하십시오. 단지 DataSet이 생성 된 것에서가 아니라 데이터베이스를 전혀 사용하지 않고 추상화 할 수 있기를 원합니다. .

+0

답장을 보내 주셔서 감사합니다. 나는 이것을 선내에 가지고 간다. 그러나 이것이 내가 제거 할 수없는 유산 코드이다. db connection 등을 다루는이 방법을 사용했다면 인스턴스화 된 객체의 라이프 스타일에 대해 어떻게 생각하십니까? 요청에 따라 적절하다고 생각하십니까? –

+0

이 클래스가 주어진 클래스이고 인스턴스화 할 때 결정해야하는 모든 것은 사용자의 필요에 따라 요청하십시오.이 클래스는 공유 상태를 나타내므로 상태가 실제로 공유되지 않으면 버그가 발생할 가능성이 가장 적기 때문입니다. 성능에 미치는 영향은 무시해도 좋을 것입니다. 왜냐하면 말했듯이 실제로 그렇게 많이하는 것은 아닙니다. –