NserviceBus Sagas에 대한 훌륭한 튜토리얼 (http://blogs.planbsoftware.co.nz/?p=247)을 읽었지 만 데이터베이스 또는 비즈니스 계층 트랜잭션을 사용하는 것보다이 모델 (sagas)의 이점이 무엇인지 이해하지 못합니까?NserviceBus Sagas 유틸리티
답변
사가 모델의 주된 장점은 시스템 (및 다양한 일괄 처리 작업)에 분산되어있는 논리와 데이터를 가져 와서 단일 클래스에 따라 더 나은 단일 클래스로 끌어 올 수 있다는 것입니다 책임 원칙. 일단 당신이 그것을 얻으면, 당신은 좋은 소프트웨어 관행에서 오는 다른 모든 이익을 얻습니다 - 더 나은 테스트 가능성, 유지 보수성 등
저는 사가 모델의 진정한 이점을 보여주기 위해 두 가지 예를 보여 드리겠습니다.
수백 개의 분산 호스트가있는 서비스 지향 아키텍처가 있다고 가정 해보십시오. 고객이 하나 이상의 무용담을 시작하는 주문을합니다. 각 무용담에는 관련 비즈니스 로직이 있습니다. 각 주어진 사가에 대한 핸들러는 다른 호스트 사이에서 공유 할 수 있으며 각 메시지를 처리하는 순서 상태를 확인할 필요가 없습니다. NServiceBus는 주문 ID 또는 다른 속성으로 일치하는 사가 상태를 암시 적으로 검사하며 아직 열어두면받을 수 있습니다 귀하의 데이터 컨텍스트.
이 모델을 NServiceBus 사용없이 패턴으로 사용할 수도 있습니다. 비디오 게임을 개발하고 일부 사용자 콤보를 추적하려고한다고 가정 해보십시오. 플레이어가 점프를 할 때마다 당신은 사가를 열고 다른 빠른 입력을 처리하는 보너스 포인트를 추가합니다. 플레이어가 입력과 사기 사이에 일정 시간 지연되면 콤보에 대한 총 점수를 절약합니다.
사가의 장점은 무엇입니까?
1) 귀하의 비즈니스 로직은 한 곳에서 캡슐화됩니다 - 사가.
2) 추가 사가를 쉽게 추가하거나 제거 할 수 있습니다. 다른 처리기 또는 호스트로 이동할 수도 있습니다.
3) 당신은 데이터베이스의 데이터 마이그레이션의 경우에 필요한 무엇을 알 필요가 없습니다, 당신은 필요한 모든 정보를
많은 감사 우디를 포함 무용담을 마이그레이션해야합니다. 두 가지를 구현하는 간단한 더미 예제를 가르쳐 주시겠습니까? 그 차이점을 실제로 이해할 수 있습니까? 상태 데이터가 시스템 전반에 퍼져 있음에 동의하지만 어쩌면 내 실존 적 문제는 다음과 같습니다. 해당 데이터가 비즈니스 프로세스의 일부인 경우 (보고서의 상태 데이터를 쿼리하고 클라이언트에 현재 상태를 알릴 필요가있을 수 있습니다. , 등) 비즈니스 데이터와 함께 상태 데이터를 저장하는 것이 이치에 맞지 않습니까? 다시 한번 감사드립니다. – Miguel
다음은 할 일 목록에 추가 할 것입니다. 그러나 진지하게 말해 사가 데이터를 직접 쿼리 할 수 있습니다.이 데이터는 일반 DB에 저장됩니다. –
SagaData를 사용하는 프로세스는 트랜잭션과 관련된 여러 시스템의 상태에 액세스 할 수있는 분산 된 트랜잭션 코디네이터 역할을합니다. 맞습니까? –