2016-07-14 51 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}); 
    }   
} 

然后我有私人的方法,实际上设置如下的值。

private void OnCreated(ProductCreatedEvent e){ 
    _name = e.Name; 
} 

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

当我使用DDD逻辑移入状态类,但因为我使用事件采购我需要调用时方法,它是一个基类之前使用的状态模式,然后调用我的私人实际设置值的'On'方法。

我想知道如何将该逻辑移入我的状态类,否则此刻我的状态类只有'Can'方法,而不是实际的实现代码。

+0

这是什么'When'关键字?它是最新的C#版本中的新功能吗? 6.0? – niksofteng

+0

什么时候是我的基类 – user1180223

+0

上的方法我知道你的讽刺,但我很喜欢它。它也读作为一个句子,当'新产品创建事件'传入时' – 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)); 
}