2012-08-09 3 views
1

이벤트 중심 아키텍처에 대해 많이 읽었으며 사용자에게 즉각적인 피드백을 제공하는 문제는 저를 혼란스럽게합니다.이벤트 구동 아키텍처에서 사용자에게 즉각적인 응답 제공

모든 직원 목록을 보유하고있는 서비스 ('EmployeeService')가 있습니다. 직원을 만드는 비즈니스 로직은이 서비스에 있습니다.

다른 시스템의 UI가이 서비스를 사용합니다. 요구 사항은 직원 그리드가 있다는 것을 (당신이 좋아하는지 말든), 그리고 양식을 가져 오는 '직원 추가 버튼'입니다. 양식을 제출하면 새 직원과 함께 gird로 돌아갑니다. 그것. 그리드 쇼는 서비스에 의해 계산 된 필드를 유도합니다 (이것은주의해야합니다!).

전통적으로 제출할 때 로딩 화면을 표시하고 직원을 등록하기위한 WCF 요청을 동 기적으로 보냈으며, 완료되면 그리드로 전달되었습니다 (이제까지는 새 직원이 생겼을 것입니다).

EDA를 사용하면 제출시 사용자를 등록하라는 명령을 '실행하고 잊어 버릴'것이지만 그 다음은 무엇입니까? 그리드로 전달할 수는 있지만 새로운 직원이 아직 거기에 없을 가능성이 있습니까? 모든 것이 OK 일 것이라고 가정 할 경우 수동으로 그리드에 추가 할 수 있지만 서비스에 의해 계산 된 파생 데이터는 어떻게 표시합니까? 아니면 그리드에 표시되는 '신입 사원 보류 그래픽'을 아직 만들지 않았 으면 만들 수 있습니다. 그런 다음 페이지를 수초마다 확인합니다.

이것은 일반적인 시나리오이므로 이에 대한 일반적인 해결책은 무엇입니까?

+0

계산이 복잡한 것입니까? 데이터를 계산하는 데 보통 얼마나 걸리나요? –

+0

@DanielMarbach 거의 순간적 일 수 있지만 그 사실을 보증 할 수는 없습니다. –

+0

그리드에 고정되어 있다면 EDA 원칙을 적용 할 필요가 없을 것입니다. RPC 접근 방식은 그럴 만합니다. –

답변

1

명령을 보낼 때 콜백을 등록하고 명령이 완료 될 때까지 차단할 수 있습니다.

NServiceBus 패키지를 다운로드 한 경우 AsyncPagesMvc3 샘플 솔루션을 참조하십시오. 그것은 당신이 찾고있는 것을 정확하게 보여줍니다.

+0

이 기능을 알고 있지만이 요청/응답 스타일은 이벤트 기반 아키텍처에서 피해야합니다. –

+0

이것은 기존 요구 사항에 비해 훨씬 간단한 솔루션입니다.실시간 업데이트 요구 사항이 있고 이와 같은 패턴을 따르고 싶지 않은 경우 EDA가 좋은 해결책이 아니므로 RPC 스타일을 따르고 싶을 수도 있습니다 (최소한 작업중인 컨텍스트 내에서) –

+0

콜백 사용 일반적으로 나쁜 냄새. NSB는 전통적인 RPC 스타일의 통신으로 되돌아가는 것을 매우 어렵게 만듭니다. Pub/Sub에 집착하십시오. –

0

EmployeeService이 SOA 서비스 인 경우 직원 추가 단추도 EmployeeService에 속합니다. 사용자 인터페이스는 여러 서비스가 결합 된 단순한 인터페이스입니다. EmployeeService의 일부를 로컬로 클라이언트에 배치하여 직원 생성 및 계산을 처리 할 수 ​​있습니다 (계산이 복잡한 것이 아닌 경우). 예를 들어

:

public class AddEmployeeView 
{ 
    public IBus Bus { get; set; }  

    public void AddNewClicked() { 
     // async calculate 
     // store directly in the employee service database 
     // or dispatch command internally 
     // refresh employee list as the service is the only owner of that data 
     Bus.Publish<NewEmployeeAdded>(m => { }); 
    } 
} 

그래서 위의 AddEmployeeViewEmployeeService에 속한다. EmployeeService만이 신입 사원을 (자체 데이터베이스에서도) 계산 및 저장하는 방법을 알고 있으며 NewEmployeeAdded 이벤트의 유일한 논리적 게시자입니다. 그리고 여기 당신의 복잡성이 사라집니다.

+0

AddEmployeeView가 웹 사이트의 일부인 경우 동일한 이벤트를 게시하는 부하 분산 장치 뒤에 해당 뷰의 많은 인스턴스를 어떻게 처리합니까? 내가 이해하는 한, 그것은 불가능하거나 좋은 생각입니다. http://www.make-awesome.com/2010/10/why-not-publish-nservicebus-messages-from-a-web-application/ –

+0

웹 사이트는 NewEmployeeAdded를 게시하는 백엔드에 명령을 보낼 수 있습니다. –

관련 문제