2012-02-03 2 views
2

CQRS 패턴은 데이터 액세스 감사를 어떻게 처리합니까? 또는 그것을 할 수 있습니까?CQRS 및 데이터 액세스 감사

배경을 알려주세요.

분산 시스템이 있습니다. 그것은 여러 "섹션"을 가지고 있습니다. 각 섹션은 비즈니스의 일부를 처리합니다. (하나는 주문, 다른 하나는 결제 및 다른 고객 등)

각 섹션에서 서로 비즈니스 이벤트 메시지를 보내도록 계획 했었습니다 (즉, 생성 된 주문, 신규 고객 등록 됨 등). 그런 다음 이벤트를 저장하고 CQRS 방식으로 재생할 수 있습니다.

나는 또한 각 섹션이 다른 섹션에서 필요한 데이터의 데이터베이스를 가질 것을 계획했다. (주문은 고객의 기본 목록을 유지하고 청구서에는 간단한 주문 목록 등이있다.) 이 데이터는 비즈니스 이벤트 메시지를 통해 수집됩니다.

"사실"CQRS가 아닌 것을 알고 있습니다. 그러나 제 질문은 CQRS에 모두 동일하다고 생각합니다.

그래서 CQRS에서 감사 데이터 액세스 및 데이터 보안은 어떻게 작동합니까? 모든 하류 시스템이 올바르게 감사 할 것이라고 그냥 믿어야합니까? (매우 긴 스트레칭)

My Architect는 이러한 이유로 CQRS를 좋아하지 않았습니다. 대신 우리는 분산 시스템의 각 섹션에서 데이터 요청을 처리 할 서비스를 제공 할 것입니다. 그런 식으로 감사 (및 보안)가 중앙 (제어되는) 위치에서 수행 될 수 있습니다.

그렇다면 CQRS에는 내가 볼 수없는 데이터 액세스 감사 전략이 있습니까? 아니면 데이터를 제어 할 필요가없는 시스템을위한 CQRS입니까?은 (아니면 완전히 CQRS의 지점을 그리워?)

그냥 경우에 중요한 : 나는 비주얼 스튜디오 2010, C# 4, .NET 4, WCF 4 일하고 NServiceBus 2.6

+0

안녕하세요, 질문에 대한 답변을 찾았습니까? 나는 CQRS를 구현할 생각을하고 있으며 같은 (유사한) 질문을 내놓았다. "감사"와 같은 솔기가 CQRS를 위반했다. 그러나 다른 측면에서, "쿼리 스택"이 서버 측에서 "감사"논리가 있다는 것을 모르는 경우 CQRS 위반으로 간주해서는 안됩니다. – Prokurors

답변

1

내가 돈 ' 패턴 자체에는 이것에 대한 메커니즘이 내장되어 있다고 생각합니다. 그래서 "모든 하류 시스템이 올바르게 감사 할 것이라고 신뢰해야합니까?" - 예.

"누가 어떤 데이터를 보았는지"(즉, 사용자 특정 데이터)와 같은 것을 감사하고 싶습니까? 또는 (즉, 시스템 이벤트 데이터) 어떤 시스템에서 보낸 메시지인지 감사하고 싶습니까?

어느 쪽이든, 저는 여러분이 "단단히 묶인"중앙 서비스 버스를 가지고 있더라도 CQRS를 이미하고 있다고 생각합니다. 모두 클래스 디자인 방식에 달려 있습니다. CQRS와 CQS는 코드를 분리하여 각 클래스에 단일 책임을 부여하는 메커니즘입니다. CQRS는 일반적으로 이질적인 시스템을 유추하는 "메시지"를 포함하는 반면, "CQS"는 하나의 응용 프로그램 도메인 내에 있다고 추론하는 "방법"분리를 유추하는 것처럼 보입니다. 일부 사람들은 CQRS로 간주되는 솔루션의 "요구 사항"으로 서비스 버스를 갖는 것에 대해 많은 것을 생각합니다. CQS와 CQRS 사이의 잠재적 차이에 대한 논점에 대해이 설명을 확인하십시오 : http://codebetter.com/gregyoung/2009/08/13/command-query-separation/. 결국, 책임 분열은 일반적으로 좋은 생각 인 것 같습니다. 시도하고 특정 질문에 대한 답변을

:

  • "? CQRS 내가 표시되지 않습니다 감사 데이터 액세스를위한 전략이 있습니까" - 아니오, 패턴으로 "감사"메커니즘이 없습니다. 그것은 순전히 그것을 구현하는 것입니다.
  • "데이터를 제어 할 필요가없는 시스템의 경우 CQRS 만 있습니다."- 아니요, 절대적으로 아닙니다. CQS/CQRS는 "간단한"웹 응용 프로그램 내에서 구현됩니다. 왜냐하면 코드를 멋지게 분리한다고 생각하기 때문입니다. 내 블로그 게시물을 참조하십시오 : http://www.nootn.com.au/2013/03/command-query-separation-to-better.html

나는 이것이 아마도 당신에게 너무 늦었지만 잘하면 누군가를 돕는다는 것을 알고 있습니다. 나는 이것에 대한 다른 사람들의 생각을 듣는 것에도 관심이있을 것이다.

1

명령과 쿼리를 분리 한 결과 실제로 시스템에서 쿼리를 기록하는 것이 훨씬 쉬워졌습니다. 나는 모든 쿼리를 중앙에 배치 할 수 있도록 쿼리에 '버스'스타일 구조를 사용하기로 결정했습니다. 따라서 로깅, 보안 및 성능 모니터링과 같은 교차 절단 문제를 쉽게 구현할 수 있습니다. 이미 더 자주 실행되거나 예상보다 느려서 최적화 할 수있는 쿼리를 발견했습니다. 희망이 도움이됩니다.