2012-06-27 4 views
1

나는 MySQL 데이터베이스에서 많은 양의 개별 데이터 조각을 수집하고이 데이터를 XML 문서로 직렬화하는 프로그램을 작성하고 있습니다.닷넷에서 많은 데이터를 수집하는 가장 좋은 방법은 무엇입니까

내 XML 문서에는 다섯 개의 기본 그룹이 있으며 각 그룹에는 세 개의 하위 그룹이 있으며 총 100 개의 데이터를 수집합니다.

콘텐츠 자체는 쇼핑 웹 사이트의 주문 세부 정보입니다. 우선 워크로드를 실행하고 클라이언트에게 보낼 다음 Order ID를 반환 한 다음이 Order ID를 사용하여 각 데이터 (주소 라인 1, 주소 라인 2, 구입 한 아이템 등)를 가져옵니다. 관계형 데이터베이스의 다양한 테이블.

내가 어떤 방향으로 나아가더라도 지저분합니다. 필자는 필요한 각 데이터에 대해 정의 된 하나의 변수를 사용하여 방대한 메서드를 작성하고, 각 변수는 MySQL 데이터베이스에 대해 쿼리를 실행하는 메서드의 반환 값과 같습니다. 일부 데이터에는 추가 논리가 적용되어야합니다 (예 : 일부 데이터는 정리해야하며 일부 날짜는 XML 용으로 특정 형식이 지정되어야합니다).

몇 점

  • 나는 데이터베이스 구조 또는 쇼핑 웹 사이트를 작성하지 않았고, 나는
  • 나는 현재 실행중인 작업 프로그램이 그것을 변경할 수 없습니다. 이것은 내가 개월이되는 전은

일부 예제 코드를 개선하기 위해 다시려고 쓴 프로그램은 다음과 같습니다 :

string valueOne = myMethod("SELECT `valueOne` FROM `tableOne` WHERE `OrderID` = '12345';"); 
string valueTwo = myMethod("SELECT `valueTwo` FROM `tableOne` WHERE `OrderID` = '12345';"); 
string valueThree = myMethod("SELECT `valueThree` FROM `tableTwo` WHERE `OrderID` = '12345';"); 
int valueFour = Convert.ToInt32(myMethod("SELECT `valueFour` FROM `tableThree` WHERE `OrderID` = '12345';")); 
string valueFive = myMethod("SELECT `valueFive` FROM `tableThree` WHERE `OrderID` = '12345';"); 

if(valueFive == "FooBar") 
{ 
    //Do Stuff 
} 

string valueSix = myMethod("SELECT `valueSix` FROM `tableThree` WHERE `OrderID` = '12345';"); 
DateTime valueSeven = DateTime.Parse(myMethod("SELECT `valueSeven` FROM `tableFour` WHERE `OrderID` = '12345';")); 
string valueEight = myMethod("SELECT `valueEight` FROM `tableFive` WHERE `OrderID` = '12345';"); 
string valueNine = String.Format("QWERTY - {0} - YTREWQ", myMethod("SELECT `valueNine` FROM `tableSix` WHERE `OrderID` = '12345';")); 
string valueTen = myMethod("SELECT `valueTen` FROM `tableSeven` WHERE `OrderID` = '12345';"); 

     MyClass fooBar = new MyClass() 
     { 
      valueOne = valueOne, 
      valueTwo = valueTwo, 
      valueThree = valueThree, 
      valueFour = valueFour, 
      valueFive = valueFive, 
      valueSix = valueSix, 
      valueSeven = valueSeven, 
      mySecondClass = new MySecondClass() 
      { 
       valueEight = valueEight, 
       valueNine = valueNine, 
       myThirdClass = new MyThirdClass() { valueTen = valueTen } 
      } 
     }; 

SerializeToXML<MyClass>(fooBar); 

가 상상하지만, 더 많은 데이터를. 예, 작동하지만 정돈이 잘 안되고 유지하기 어렵습니다. 일반적으로 매우 좋지 않습니다.

제 질문은 .Net 응용 프로그램에서 많은 양의 데이터를 수집하는 적절한 방법은 무엇입니까?

답변

2

방망이를 벗어나서 많은 쿼리를 단일 쿼리에 결합 할 수있는 것처럼 보입니다.

string valueOne = myMethod("SELECT `valueOne` FROM `tableOne` WHERE `OrderID` = '12345';"); 
string valueTwo = myMethod("SELECT `valueTwo` FROM `tableOne` WHERE `OrderID` = '12345';"); 
string valueThree = myMethod("SELECT `valueThree` FROM `tableTwo` WHERE `OrderID` = '12345';"); 
int valueFour = Convert.ToInt32(myMethod("SELECT `valueFour` FROM `tableThree` WHERE `OrderID` = '12345';")); 
string valueFive = myMethod("SELECT `valueFive` FROM `tableThree` WHERE `OrderID` = '12345';"); 
내가 그 개별 쿼리 제거하고 사용 얻을 것이다

하나 하나 : 당신은 같은 일을 할 수있는 것처럼

SELECT one.valueOne, one.valueTwo, two.valueThree, three.valueFour, three.valueFive 
    FROM tableOne one 
    INNER JOIN tableTwo two on (two.OrderId = one.OrderId) 
    INNER JOIN tableThree three on (three.OrderId = one.OrderId) 
    WHERE one.OrderId = '12345'; 

솔직히 말해서, 그것은 보이는 예를 들어, 다음과 같은이 다른 사람.

또한, 나는 정확히 무엇을 myMethod이 무엇인지 모르겠다.하지만 쿼리에 스칼라 값을 반환하는 것처럼 보일 것이다. 이를 없애고 DataTable 또는 개체 컬렉션을 돌려 줄 수있는 무언가로 바꿉니다. 그렇게하면 한 번에 필요한 모든 데이터를 가져올 수 있습니다.

참고 : 모든 테이블이 OrderId를 기반으로하는 값을 가질 것으로 예상되는 경우 내부 조인이 작동합니다. 그렇지 않으면 항상 기존 레코드가있는 테이블로 시작하는 외부 조인을 수행하십시오. 예 :

SELECT one.valueOne, one.valueTwo, two.valueThree, three.valueFour, three.valueFive 
     FROM orders o 
     LEFT OUTER JOIN tableOne one on (one.OrderId = o.OrderId) 
     LEFT OUTER JOIN tableTwo two on (two.OrderId = o.OrderId) 
     LEFT OUTER JOIN tableThree three on (three.OrderId = o.OrderId) 
     WHERE o.OrderId = '12345'; 
1

당신은 실제로 객체 지향 프로그래밍을 활용하지 못합니다. 예제에서 테이블 간의 관계를 추측하기는 어렵지만 Chris Lively는 테이블 간의 관계를 유추하는 훌륭한 작업을 수행했으며이를 쇼핑 웹 사이트의 주문 세부 정보라고 설명했습니다.분명히 그것은 일관된 관계를 의미합니다.

나는 이러한 방식으로 문제에 접근하는 것입니다 :

  • 데이터 당신 필요성을 얻을 수있는 가장 효율적인 통합 쿼리를 개발한다.
  • 각 쿼리에 대해 클래스를 만듭니다. 클래스를 으로 구조화하여 데이터 ("5 개의 기본 그룹, 각각 3 개의 하위 그룹이 있음")과 일치시킵니다.
  • 좋은 OOP 원리를 따르고 해당 클래스의 클래스에서 필요한 복잡도를 숨기려면 이 필요합니다.
  • 변수에 더 많은 설명이 포함 된 이름을 사용하고 클래스를 사용하십시오.

더 읽기 쉽고 유지 보수가 잘되며 "깔끔한"코드가 있어야합니다.

관련 문제