0

보고 엔진에 대해 데이터을 생성하는 보고서 엔진을 설계 (및 코딩)하고 있습니다. 이는 프레젠테이션 계층에 대해 이 아니며입니다.논리 보고서 엔진을 만드는 데 유용한 디자인 패턴은 무엇입니까?

예 : 사람들의 기록이 가득한 데이터베이스가 있습니다. DB의 각 사용자는 약 15 개의 속성을가집니다.

내 보고서는 약 15 비즈니스 규칙에 따라, 사람의 특정 그룹을 선택

  1. 할 필요가있다. 예를 들어 다음과 같은 단순한 WHERE 절보다 논리적 인 흐름 알고리즘에 더 닮았습니다. 18-25 세이며 자영업자입니다. 100 명 미만인 경우 25-28 세 그룹도 포함 ... 100 명 미만인 경우 학생 인 사람도 데려가십시오. ... 계속됩니다 ...
  2. 특정 그룹에 대한 작업을 진행하면서 다른 그룹별로 다른 데이터 세트를 작성해야하며 서로 다른 측정 항목을 포함해야합니다. 예를 들어, 평균 신장 - 체중별로 그룹화, 평균 소득 - 연령별로 그룹화 ... 이들은 또한 다음과 같은 복잡한 비즈니스 규칙을 가지고 있습니다. - 연령 그룹에 5 명 미만인 사람이있는 인접 그룹과 집계하십시오. 거기에 사람들의 작은 수는 있지만, 어쨌든 항상

내 주요 관심사는 내가 매우 유사하다는 것을, 비즈니스 규칙의 많은을 가지고 있다는 것입니다 .... 독립적으로 20 ~ 30 세 그룹을 보여 형태가 다르지만 온갖 종류의 작은 세부 사항이 있습니다. 내 경험에 비추어 볼 때, 유지하기가 끔찍한 많은 중첩 된 if-else를 가진 정말 긴 파일이되는 바람에 유지 보수 가능하고 이해하기 쉬운 방법으로 이것을 작성하고 싶습니다.

나는 꽤 많은 양의 보고서를 가지고 있으며 가능한 한 많은 보고서를 미리 계산하고 싶습니다. 실제로 보고서의 기준은 무한히 많기 때문에 보고서를 즉시 작성해야합니다. 사전 계산과 임시보고에 대한 논리를 한 곳에서 유지하고 싶습니다.

여기의 보고서 데이터는 제품이므로 매우 신속하게 전달하여 최종 사용자에게 전달해야합니다.

현재 설계에는 CouchDB에 저장된 데이터와 nodeJS에서 수행되는 처리가 포함됩니다. 훨씬 쉽고 빠르게 사용할 수있는 무언가가 있다면 바뀔 수 있습니다. 나는 수십억 개의 레코드를 가지고 있는데, 이것이 '빅 데이터'라고 말하지는 않습니다. (물론 이것은 커질 수도 있습니다.)

감사합니다.

답변

0

서로 상호 작용해야하는 비즈니스 규칙이 여러 개있을 것이므로 가장 먼저 떠오르는 디자인 패턴은 Decorator Pattern입니다. 이 패턴의 목적은 주어진 객체가 통과 할 때 정보를 추가하는 것입니다. 그래서 당신은 사람들의 목록을 제공하는 행동을 취할 수 있으며, 특정 연령대의 사람들을 식별 할 수 있습니다. 그런 다음이 하위 목록을 성별로 정렬하는 등의 다른 동작에 전달합니다.

그러나 비즈니스 규칙이 변경되기 쉽기 때문에 코드를 유연하게 만들어야합니다. 그러기 위해서는 다양한 알고리즘을 지정할 수 있으므로보고 알고리즘 (사용자가 원할 때 모든 것을 렌더링하는 응용 프로그램의 주요 핵심 요소)에 전달할 수 있으므로 내 생각에는 Strategy Pattern을 사용해야합니다. 당신이 어떤 종류의 정보를 다루고 있는지에 대한 문제없이이렇게하면보고 도구의 동작을 쉽게 변경하고 확장 할 수 있습니다.

마지막으로, 내가 가정하고있는 데이터베이스로 작업하는 경우 Singleton Pattern을 사용하여 데이터베이스 연결 및 상호 작용을 관리 할 수 ​​있습니다. 그것은 말하기를, 당신이 선택한 언어로 이미 이용 가능한 이런 종류의 것을 발견 할 가능성이 가장 큽니다.

관련 문제