바이너리 파일 데이터를 구문 분석하고 데이터베이스에 저장하기 위한 디자인 패턴

StackOverflow https://stackoverflow.com/questions/11680

  •  08-06-2019
  •  | 
  •  

문제

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

XML이나 탭으로 구분된 파일을 가져와 이를 대표 개체로 구문 분석하는 데에도 비슷한 패턴을 사용할 수 있다고 생각합니다.

일반적인 데이터 구조에는 다음이 포함됩니다.

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

좋은 디자인에는 파일 형식이나 헤더에 포함된 일부 정의된 메타데이터를 기반으로 구문 분석 정의를 변경하는 방법이 포함된다고 생각합니다.그래서 팩토리 패턴 파서 부분의 전체 디자인의 일부가 됩니다.

도움이 되었습니까?

해결책

  1. 생각나는 기술을 사용하여 파일 파서를 작성하세요.
  2. 모든 엣지 케이스가 포함되는지 확인하기 위해 많은 단위 테스트를 작성하십시오.

이 작업을 수행하면 실제로 문제/해결책에 대한 합리적인 아이디어를 갖게 됩니다.

지금 당장 당신의 머릿속에는 이론이 떠돌고 있을 뿐인데, 그 중 대부분은 잘못된 것으로 판명될 것입니다.

3단계:무자비하게 리팩토링하세요.당신의 목표는 코드의 절반 정도를 삭제하는 것입니다

마지막에 코드가 기존 디자인 패턴과 유사하거나 새 디자인 패턴을 생성했음을 알 수 있습니다.그러면 당신은 이 질문에 대답할 자격을 갖추게 될 것입니다 :-)

다른 팁

나는 Orion Edwards의 의견에 전적으로 동의하며 일반적으로 이것이 내가 문제에 접근하는 방식입니다.하지만 최근에는 광기에 대한 몇 가지 패턴(!)이 보이기 시작했습니다.

더 복잡한 작업의 경우 일반적으로 다음과 같은 것을 사용합니다. 통역사 (또는 전략) 일부를 사용하는 건축업자 (또는 공장) 데이터의 각 부분을 생성합니다.

스트리밍 데이터의 경우 전체 파서는 다음과 같습니다. 어댑터, 스트림 개체에서 개체 스트림(일반적으로 대기열임)으로 조정됩니다.

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

그러나 일부 팩토리 함수의 스위치 문에서 생성된 개체는 아마도 많은 소규모 작업에 대한 가장 간단한 방법일 것입니다.또한, 나는 누군가 동시성을 목구멍에 밀어넣을 때를 결코 알 수 없기 때문에 내 데이터 객체를 불변으로 유지하는 것을 좋아합니다 :)

전략 패턴은 아마도 여러분이 보고 싶은 패턴일 것입니다.전략은 파일 구문 분석 알고리즘입니다.

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

사용 법률 그리고 YACC.앞으로 10년을 이 주제에만 전념하지 않는 한, 그들은 매번 더 좋고 더 빠른 코드를 생성할 것입니다.

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