我正在查看域名事件,特别是有两种可能性:
一个。使用" 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; }
}
这将导致更多的事件类,一方面可能会得到太多,另一方面事件类名称包含语言,这可能是一个加分点。
你有什么建议吗?我没有域名活动的经验,也不能在这里做出合格的决定(两者似乎都没有任何重大缺点)
答案 0 :(得分:2)
这可以归结为“通用”事件是否会导致任何行为。如果它只是带有一个有趣的值,因为像“类别”这样的东西可能就足够了。
但是,如果事件附加了任何特定的行为,因此,它在系统中具有任何特定含义,我肯定会建议采用更明确的方法。
答案 1 :(得分:1)
作为一般经验法则,使用switch
语句通常被认为是OO语言中的代码气味。
http://c2.com/cgi/wiki?SwitchStatementsSmell
B中。如果我理解正确的话,它会更明确,也会使代码更简洁:
var subscription = DomainEvents
.AsObservable<OrderCompletedEvent>()
.Subscribe(OnOrderCompleted);