첫째, 이것이 무시 된 질문 / 영역 인 것처럼 말하고 싶습니다.이 질문을 개선 해야하는 경우이 질문을 다른 사람들에게 도움이 될 수있는 훌륭한 질문으로 만드십시오! 나는 시도 할 아이디어뿐만 아니라이 문제를 해결하는 솔루션을 구현 한 사람들의 조언과 도움을 찾고 있습니다.
필자의 경험에는 응용 프로그램의 두 가지 측면이 있습니다. "작업"측면은 주로 도메인 중심이며 사용자는 도메인 모델 (응용 프로그램의 "엔진") 및 사용자가보고하는 측면과 풍부하게 상호 작용하는 곳입니다. 작업 측면에서 발생하는 일을 기반으로 데이터를 가져옵니다.
작업 측면에서 리치 도메인 모델이있는 애플리케이션은 도메인 모델에 비즈니스 로직이 있어야하며 데이터베이스는 주로 지속성을 위해 사용해야합니다. 우려의 분리, 모든 책은 그것에 대해 쓰여졌습니다. 우리는 무엇을 해야할지 압니다.
보고 측은 어떻습니까? 데이터웨어 하우스는 수용 가능합니까, 아니면 데이터베이스에 비즈니스 로직과 데이터 자체를 통합하여 설계가 잘못 되었습니까? 데이터베이스의 데이터를 데이터웨어 하우스 데이터로 집계하려면 비즈니스 논리 및 규칙을 데이터에 적용해야하며 해당 논리 및 규칙은 도메인 모델에서 온 것이 아니라 데이터 집계 프로세스에서 온 것입니다. 그게 잘못이야?
비즈니스 로직이 광범위한 대규모 재무 및 프로젝트 관리 응용 프로그램에서 작업합니다. 이 데이터를보고 할 때 보고서 / 대시 보드에 필요한 정보를 가져 오기 위해 수행해야하는 많은 집계가있을 수 있으며 집계에는 많은 비즈니스 논리가 있습니다. 성능 향상을 위해 집계 된 테이블과 저장 프로 시저로 수행했습니다.
예를 들어, 활성 프로젝트 목록을 표시하려면 보고서 / 대시 보드가 필요하다고 가정합니다 (1 만 개의 프로젝트 상상). 각 프로젝트에는 다음과 같은 일련의 메트릭이 필요합니다.
- 총 예산
- 지금까지의 노력
- 연소율
- 현재 레코딩 속도의 예산 소진 날짜
- 기타
이들 각각에는 많은 비즈니스 로직이 포함됩니다. 저는 숫자 나 간단한 논리를 곱하는 것에 대해서만 말하는 것이 아닙니다. 예산을 얻으려면 500 명의 다른 요율로 요율표를 적용해야합니다. 각 직원의 시간 (일부 프로젝트, 다른 사람은 승수가 있음), 비용 및 적절한 마크 업 등을 적용해야합니다. 논리는 광범위합니다. 클라이언트에 적절한 시간 내에이 데이터를 가져 오려면 많은 집계 및 쿼리 조정이 필요했습니다.
도메인을 먼저 실행해야합니까? 성능은 어떻습니까? 직접적인 SQL 쿼리를 사용하더라도 클라이언트가 합리적인 시간에 표시 할 수있을만큼이 데이터를 거의 얻지 못합니다. 이러한 모든 도메인 개체를 재수 화하고 응용 프로그램 계층에서 데이터를 혼합 및 일치시키고 집계하거나 응용 프로그램에서 데이터를 집계하려고 시도하는 경우이 데이터를 클라이언트에 충분히 빨리 가져 오는 것을 상상할 수 없습니다.
이 경우 SQL이 데이터를 잘 처리하는 데 능숙한 것 같습니다. 왜 사용하지 않습니까? 그러나 도메인 모델 외부에 비즈니스 로직이 있습니다. 비즈니스 로직에 대한 모든 변경 사항은 도메인 모델 및보고 집계 체계에서 변경해야합니다.
도메인 기반 설계 및 모범 사례와 관련하여 응용 프로그램의보고 / 대시 보드 부분을 디자인하는 방법에 대해 실제로 손실되었습니다.
MVC는 디자인 풍미 듀어이며 현재 디자인에 사용하고 있기 때문에 MVC 태그를 추가했지만보고 데이터가 이러한 유형의 응용 프로그램에 어떻게 적용되는지 파악할 수 없습니다.
책, 디자인 패턴, Google의 핵심 단어, 기사 등 모든 분야에서 도움을 찾고 있습니다. 이 주제에 관한 정보를 찾을 수 없습니다.
편집 및 다른 예
오늘 나는 또 다른 완벽한 예를 보았습니다. 고객이 고객 영업 팀에 대한 보고서를 원합니다. 그들은 간단한 메트릭처럼 보이는 것을 원합니다.
각 영업 사원의 현재 연간 매출액은 얼마입니까?
그러나 그것은 복잡합니다. 각 영업 사원은 여러 영업 기회에 참여했습니다. 일부는 이기고 일부는하지 않았습니다. 각 영업 기회에는 각 역할과 참여에 따라 판매에 대해 일정 비율의 신용이 할당 된 여러 영업 사원이 있습니다. 이제 모든 영업 사원에 대해 데이터베이스에서이 데이터를 가져 오기 위해 수행해야하는 객체 리 하이드 레이션의 양에 대해 도메인을 통과한다고 상상해보십시오.
모두 가져 오기
SalesPeople
->
각각에 대해 가져 오기SalesOpportunities
->
각각에 대해 판매의 백분율을 가져오고 판매 금액
을 계산 한 다음 모든 판매 금액 을 합산 하십시오SalesOpportunity
.
그리고 그것은 하나의 메트릭입니다. 또는 SQL 쿼리를 작성하여 신속하고 효율적으로 수행하고 빠르게 조정할 수 있습니다.
편집 2- CQRS 패턴
CQRS 패턴 에 대해 읽었 으며 흥미롭게도 Martin Fowler조차도 테스트되지 않았다고 말합니다. 과거에이 문제가 어떻게 해결 되었습니까? 이것은 어느 시점에서나 모든 사람이 직면해야합니다. 성공한 실적을 가진 확립 된 또는 잘 착용 된 접근법은 무엇입니까?
편집 3-보고 시스템 / 도구
이와 관련하여 고려해야 할 또 다른 사항은보고 도구입니다. Reporting Services / Crystal 보고서, Analysis Services 및 Cognoscenti 등은 모두 SQL / 데이터베이스의 데이터를 기대합니다. 나중에 귀하의 데이터가 귀하의 비즈니스를 통해 올 것 같지는 않습니다. 그럼에도 불구하고 그들과 같은 사람들은 많은 대규모 시스템에서보고의 중요한 부분입니다. 이러한 시스템에 대한 데이터 소스 및 보고서 자체에 비즈니스 로직이있는 경우 이들에 대한 데이터는 어떻게 올바르게 처리됩니까?