문제

프로젝트 중 하나에서 데이터 액세스에 대한 수업이 많지만 데이터 리더의 데이터를 검색하는 코드로 인해이 클래스는 매우 부피가 커지고 있습니다.

내 코드는 일반적으로 다음과 같습니다.

// Execute the data reader
using (DbDataReader reader = command.ExecuteReader())
{
  while (reader.Read())
  {
     obj = this.FillDataReader(reader);
     objlist.Add(obj);
  }
}

internal SomeObject FillDataReader(IDataReader dr)
{
   SomeObject obj = new SomeObject ();


   if (!dr.IsDBNull(dr.GetOrdinal("objectID")))
   {
     obj.ID = dr.GetInt32(dr.GetOrdinal("objectID"));
   }

   return obj;
}

충전 방법 중 일부는 400 개 이상의 라인에 쉽게 도달하므로이를 분리 할 수있는 괜찮은 방법이 있습니까? 부분 클래스가 받아 들여질 수 있습니까? 이상적인 세상에서는 ORM을 사용할 것입니다. 그러나 불행히도 나는 하나를 사용하는 방법을 배울 시간을 감당할 수 없습니다.

도움이 되었습니까?

해결책

확실히 부분 클래스를 사용하여 채우기 메소드의 코드를 분할 할 수 있습니다. 템플릿 시스템을 사용하여 이러한 부분 클래스 파일을 생성 할 수도 있습니다.

즉, ORM은 더 간단한 솔루션이며 귀하의 요구가 간단하다면 실제로 운동하는 데 시간이 오래 걸리지 않습니다.

미세 제어가 필요하지 않은 기본 요구 사항의 경우 LINQ에서 SQL에서 SQL을 처리하고 VS 2010 / .NET 4의 일부로 업데이트되고 있다고 생각하는 것과 상반됩니다.

또 다른 옵션은 Entity Framework이며 VS 2010 / .NET 4의 일부로 업데이트되고 있습니다. 더 많은 제어력을 제공하지만 좀 더 많은 학습이 필요할 수도 있습니다.

이 400 회 이상 긴 채우기 방법을 만드는 데 얼마나 걸립니까? 그 시간을 사용하여 ORM을 배우지 못했습니까? 어떤 프로그래머도 쿠키 커터 코드 (예 : ado.net 채우기 메소드)를 끊임없이 작성해야한다고 생각해서는 안됩니다. 프로그래밍에서 기쁨을 빠르게 받아 들일 수 있습니다!

다른 팁

부분 클래스는 코드를 분리하는 데 도움이되지만 파일은 동일한 프로젝트에 있어야합니다. 이것을 원하지 않는다면 왜 데이터 액세스 클래스에서 새로운 클래스를 상속하지 않겠습니까?

코드 추출 값을 데이터 리더에서 도우미 클래스 또는 확장 방법으로 이동할 수 있습니다.

예 :

 public int GetIntOrDefault(this DataReader dr, string fieldName, int defaultValue){
     var value = dr.GetOrdinal(fieldName);
     return (!dr.IsDBNull(value)) ? dr.GetInt32(value) : defaultValue;
 }

 internal SomeObject FillDataReader(IDataReader dr)
 {
    SomeObject obj = new SomeObject ();
    obj.ID = dr.GetInt32OrDefault("objectID", 0); // 1 line instead of 4
    ...
    return obj;
 }

이것은 ORM을 시도하는 것이 좋습니다. 보인다 이바 티스 RAW SQL에 많은 투자를했을 때 앱에서 사용하기 쉽습니다. 그리고 다른 많은 Orm도 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top