DDD泛型与特定域事件

时间:2015-11-13 15:32:14

标签: c# domain-driven-design domain-events

我正在查看域名事件,特别是有两种可能性:

一个。使用" generic"这样的事件:

public class OrderStateChangedEvent : IEvent
{
  public Guid OrderId { get; }
  public OrderState NewState { get; }
}
然后消费者会想出新的状态并做点什么。由于我使用Rx,这不会那么难(并且比开关/案例更好):

var subscription = DomainEvents
     .AsObservable<OrderStateChangedEvent>()
     .Where(e => e.NewState == OrderState.OrderCompleted)
     .Subscribe(OnOrderCompleted);

B中。使用特定事件:

public class OrderCompletedEvent : IEvent
{
  public Guid OrderId { get; }
}

这将导致更多的事件类,一方面可能会得到太多,另一方面事件类名称包含语言,这可能是一个加分点。

你有什么建议吗?我没有域名活动的经验,也不能在这里做出合格的决定(两者似乎都没有任何重大缺点)

2 个答案:

答案 0 :(得分:2)

这可以归结为“通用”事件是否会导致任何行为。如果它只是带有一个有趣的值,因为像“类别”这样的东西可能就足够了。

但是,如果事件附加了任何特定的行为,因此,它在系统中具有任何特定含义,我肯定会建议采用更明确的方法。

答案 1 :(得分:1)

作为一般经验法则,使用switch语句通常被认为是OO语言中的代码气味。

http://c2.com/cgi/wiki?SwitchStatementsSmell

B中。如果我理解正确的话,它会更明确,也会使代码更简洁:

var subscription = DomainEvents
   .AsObservable<OrderCompletedEvent>()
   .Subscribe(OnOrderCompleted);