我正在使用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'方法,而不是实际的实现代码。
答案 0 :(得分: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));
}