事件不应该是继承的方式
newbe36524 opened this issue · 5 comments
newbe36524 commented
用户自定义数据作为 IEvent { T Body } 的方式存在,可以更加有利于框架代码的维护。
用户自定义事件的本质其实是自定义了其中的数据,这些自定义数据和时间的原生数据共同组成了事件。
如此设计会更加符合单一职责原则。
u-less commented
@newbe36524 可以举个例子更详细的描述下改动建议吗?
newbe36524 commented
// 事件
public interface IEvent
{
string EventType {get;set;}
long Version {get;set;}
}
// 具有自定义数据的事件
public interface IEventWithData<T>: IEvent
{
T Body {get;set;}
}
框架内部只要运作 IEvent 和 IEventWithData 就可以了。
// 具体事件
public class RayEvent<T>: IEvent<T>
{
string EventType {get;set;}
T Body {get;set;}
long Version {get;set;}
}
// 用户定义的事件,实际上是有他关心的事件数据。用户其实不需要知道版本之类的信息
public class AccountLockEvent
{
public string LockBy {get;set;}
}
u-less commented
@newbe36524
现在事件已经不需要关心版本号那些信息了
public class TopupEvent : IEvent
{
public decimal Amount { get; set; }
public decimal Balance { get; set; }
}
ElanHasson commented
I am assuming TopupEvent
to function as a command being sent to perform a deposit.
What about the events that are raised after the command is processed?
Wouldn't those need version?
newbe36524 commented
@ElanHasson I think maybe you mean idempotency of event? You can specify a uid in Ray while event raising. It should be handle only once with the same uid.