2014-03-28 4 views
0

몇 가지 간단한 배경 : 여러 KPI를 저장하는 텍스트 파일이 있습니다. 예를 들어 한 줄에 * KPI_One *이라고 표시되어 있으므로 해당 KPI에 대한 모든 데이터를 읽을 때까지 X 줄을 읽고 처리합니다. 이는 여러 KPI에서 수행됩니다. KPI 간에는 관계가 없으며 각 KPI마다 다른 형식이 있습니다.지루하고 반복적 인 과정을 용이하게 할 수있는 방법은 무엇입니까?

어쨌든, 나는 이미 파일을 읽고 그에 따라 모든 줄을 처리하고 있습니다. 문제는 많은 KPI가 있으므로 테이블마다 저장해야하는 저장 프로 시저와 검색 할 저장 프로 시저가 있어야한다는 것입니다. C# 코드에서 모든 KPI에는 구조체가있는 클래스, 문자열을 구문 분석하는 메서드, 구문 분석 된 선을 삽입하는 메서드 및 데이터를 검색하는 메서드가 있습니다.

여러분도 알다시피, 모든 KPI에는 6 단계가 필요하므로 지루합니다. 내 질문 :이 모든 것을 세계화 할 수있는 방법이 있습니까?

감사합니다.

+1

구문 분석 할 몇 줄의 예를 제공해 주시겠습니까? 나는 생각을 가지고 있지만 당신의 문제에 맞을 지 모르겠다. – ppetrov

답변

0

여기 전체적인 문제를 단순화하는 한 가지 방법입니다.

  1. 우리가 등을 저장 프록 대응, 완벽하게 하나의 테이블에있는 모든 KPI 데이터를 저장, 그리고 생성/N 테이블을 유지 보수 할
  2. 우리가 읽을 수있는 데이터를 삽입 한 저장된 프로 시저를 사용하고 한 것 모든 KPI 데이터에 적용됩니다. (우리는 Linq1Sql 또는 EF를 사용하여 저장된 proc을 완전히 제거 할 수 있습니다)
  3. 우리는 모든 유형의 KPI와 그 데이터를 처리하는 단일 프로그래밍 구조를 갖습니다.

하나의 솔루션 :

'KPI'테이블 열은 다음과 같습니다

  1. 아이디
  2. 이름
  3. JsonLineData

C# 코드 :

public enum KPIType 
{ 
None = 0, 
KPI_One = 1, // the value corresponds to the Id column values in KPI table. 
KPI_Two = 2, 
// so on 
} 

Dictionary<KPIType, Func<string, string>> kpiProcessors = 
         new Dictionary<KPIType, Func<string, string>>(); 

// define all the kpi processor delegates. 
// the delegate will take string line data from the input file and 
// convert into the Struct object for that KPI and serialize this struct 
// into JSON. 
// note the output string is not same as the input file string. it is JSON 
// of the structure for the KPI. 

kpiProcessors.Add(KPIType.KPI_One, KPIOneDataProcessorMethodName); 
kpiProcessors.Add(KPIType.KPI_Two, KPITwoDataProcessorMethodName); 

// KPIOneDataProcessorMethodName is of the form 
public string KPIOneDataProcessorMethodName(string inputFileKpiLineData) 
{ 
struct KPI_One_Struct; 
// process inputFileKpiLineData to populate KPI_One_Struct 
return JsonConvert.SerializeObject(KPI_One_Struct); 
} 

void ProcessFile() 
{ 
// actual file processing logic. 

do 
{ 
    KPIType currentKPIType = KPI_One; // read current KPI; 

    while (string lineData = KPI_Type_Line_Data_From_File) 
    { 
     Func<string, string> kpiFunc = kpiProcessors[currentKPIType]; 
     string jsonKpiStructData = kpiFunc(lineData); 

     SQLHelper.InsertKpiDataLine(currentKPIType, jsonKpiStructData); 
    } 

} while (kpidataisreadfromfile) 
+0

고마워. 몇 가지 질문이있었습니다. 1) 구조체에는 어떤 요소가 포함되어 있습니까? 2) 값을 검색 할 때 JSON 객체를 deserialize해야합니까? 3) KPIOneDataProcessorMethodName이라는 메소드가 있습니다. 각 KPI에 대한 메소드가 있습니까? 4)이 데이터는 시간 단위로 저장됩니다. KPI 중 하나에 대한 테이블 중 하나는 18 일 동안 44,000 개의 레코드가 있습니다. 모든 것을 하나의 테이블에 저장한다고 가정하면,이 테이블을 구문 분석하고 해당 테이블에 저장하는 것보다 빠르거나 느릴까요? –

+0

나는 이것을 위해보다 객체 지향적 인 접근 방식이 필요했다. 사용하는 아키텍처에 관계없이, 집계 한 이후로 데이터를 구문 분석해야합니다. –

관련 문제