2016-07-14 3 views
0

이벤트 소싱에 CQRS를 사용하고 있으며 집계 루트에 상태 패턴을 사용하려고합니다.CQRS 및 이벤트 소싱을 통한 상태 패턴

현재 Create() 및 CreateSubscription이라는 몇 가지 메소드가있는 제품 도메인 모델이 있습니다.

public static void Create(string name){   
    When(new ProductCreatedEvent { Name = name}); 
} 

public void CreateSubscription(string name){   
    if(_productState.CanCreateSubscription()){ 
     When(new SubscriptionCreatedEvent { Name = name}); 
    }   
} 

그렇다면 실제로 아래 값을 설정하는 개인 메서드가 있습니다.

나는 논리 상태 클래스로 이동했지만, 난이 이벤트 소싱을 사용하고 있기 때문에이 기본 클래스에있는 경우 메소드를 호출 할 필요가 DDD 사용하기 전에 상태 패턴을 사용했다
private void OnCreated(ProductCreatedEvent e){ 
    _name = e.Name; 
} 

private void OnSubscriptionCreated(SubscriptionCreatedEvent e){ 
    _subscriptions.Add(Subscription.Create(e.Name)); 
} 

는 다음 내 개인을 호출 실제로 값을 설정하는 'On'메소드.

그 논리를 내 상태 클래스로 옮기는 방법을 궁금해했습니다. 그렇지 않은 경우에는 내 상태 클래스에만 실제 구현 코드가 아닌 'Can'메서드 만 있습니다.

+0

이'When' 키워드는 무엇입니까? 최신 C# 버전의 새로운 기능입니까? 6.0? – niksofteng

+0

내 기본 클래스의 메서드가 언제입니까 – user1180223

+0

당신이 냉소적 인 것을 알지만 많이 좋아합니다. 또한 'When new product Created Event'에서 전달되는 객체 유형의 문장으로 읽습니다. – user1180223

답변

0

_productState에 물건을 전달할 수 없습니까? 예를 들어

private void OnSomeEvent(SomeEvent e){ 
    _productState.Something(); // pass in e? 
} 

는 :

public void CreateSubscription(string name){   
    _productState.CreateSubscription(name); 
} 

public class ProductState 
{ 
    public void CreateSubscription(string name) 
    { 
     if (this.CanCreateSubscription()) 
     { 
      _subscriptions.Add(Subscription.Create(name)); 
     } 
    } 
} 

또는

public void OnSomeEventThatMeansYouCanCreateASubscription(string name) 
{ 
    _productState.EnableCreateSubscription(name);  
} 

public void OnSomeEventThatNeedsToCheckTheState(string name) 
{ 
    if (_productState.CanCreateSubscription())  
     _subscriptions.Add(Subscription.Create(name)); 
} 
관련 문제