2008-08-14 4 views
6

바이너리 데이터 파일을 가져 와서 개체의 일부를 개체로 구문 분석하고 결과 데이터를 데이터베이스에 저장하는 디자인 패턴을 권장하는 사람이 있습니까?바이너리 파일 데이터를 구문 분석하고 데이터베이스에 저장하기위한 디자인 패턴

XML 또는 탭 구분 파일을 가져 와서 대표 객체로 파싱하는 데 비슷한 패턴이 사용될 수 있다고 생각합니다.

일반적인 데이터 구조는 다음과 같습니다

(헤더) (DataElement1) (DataElement1SubData1) (DataElement1SubData2) (DataElement2) (DataElement2SubData1) (DataElement2SubData2) (EOF)

나는 생각 좋은 디자인은 파일 유형이나 헤더에 포함 된 정의 된 일부 메타 데이터를 기반으로 파싱 정의를 변경하는 방법을 포함합니다. 따라서 Factory Pattern은 Parser 부분의 전체적인 디자인의 일부가됩니다.

답변

21
  1. 그냥, 기술은 모든 가장자리의 경우는
  2. 이 작업을 완료하면

을 포함하고 있는지 확인하는
  • 단위 테스트를 많이 쓰기 마음에 와서 무엇이든 사용하여 파일 파서 쓰기 당신은 실제로 문제/해결책에 대한 합리적인 아이디어를 갖게 될 것입니다.

    지금 당장 이론이 머리에 떠 다니기 쉽습니다. 대부분의 이론은 잘못된 것으로 판명 될 것입니다.

    3 단계 : 무자비하게 리 팩터. 코드의 절반을 삭제해야합니다.

    마지막 코드는 기존 디자인 패턴과 비슷하거나 새로운 패턴을 생성합니다. 그러면이 질문에 답변 할 수있는 자격이 부여됩니다 :-)

  • 1

    전략 패턴은보고 싶은 부분 일 수 있습니다. 이 전략은 파일 파싱 알고리즘입니다.

    그런 다음 데이터베이스 삽입을위한 별도의 전략이 필요합니다.

    4

    나는 Orion Edwards와 완전히 동의하며 일반적으로 문제에 접근합니다. 하지만 요즘 나는 광기에 어떤 패턴 (!)을보기 시작했습니다. 일부 builder (또는 factory)는 데이터의 각 부분을 만드는 데 사용 나는 보통 interpreter (또는 strategy) 같은 것을 사용보다 복잡한 작업을 위해

    .

    스트리밍 데이터의 경우 전체 구문 분석기는 adapter처럼 보이며 스트림 개체에서 개체 스트림 (대개 단순한 큐임)에 적용됩니다.

    예를 들어 내부 데이터 요소 (인터프리터가 제공)에 대해 빌더를 내부적으로 사용하는 전체 데이터 구조 (헤드에서 EOF까지)에 대해 하나의 빌더가있을 수 있습니다. EOF가 발생하면 객체가 방출됩니다.

    그러나 일부 factory 함수에서 switch 문으로 작성된 객체는 아마도 더 적은 작업을 수행하는 가장 간단한 방법 일 것입니다.또한 누군가가 동시성을 목구멍에 떨어 뜨릴 때를 알지 못해서 데이터 객체를 변경할 수 없도록 유지하는 것이 좋습니다.

    1

    Lex 및 YACC를 사용하십시오. 앞으로 10 년을이 주제에 전념하지 않는다면 매번 더 빠르고 더 나은 코드를 생산할 것입니다.

    관련 문제