具有CQRS和事件源的状态模式

问题描述 投票:0回答:1

我正在使用带有事件源的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之前使用状态模式时,逻辑已移入状态类,但是由于我正在使用事件源,因此我需要调用基类中的When方法,然后调用我的私有'On'方法,实际设置值。

[我想知道如何将逻辑移到状态类中,否则此刻我的状态类上只有'Can'方法,而没有实际的实现代码。

c# domain-driven-design cqrs event-sourcing state-pattern
1个回答
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));
}
© www.soinside.com 2019 - 2024. All rights reserved.