谈谈它
终于有些眉目了,搜刮了很多牛人的资料,英文的,中文的,民国文的,终于小有成就了,同时也做了个DEMO,领域事件这东西好,但需要你明白它之后才会说好,而对于明白领域事件这件事来说,它的门槛有点高,居然花了我三天的时间才把它搞定,嗨!
占占给它的定义
领域事件:Domain Event,是针对某个业务来说的,或者说针对某个聚合的业务来说的,例如订单生成这种业务,它可以同时对应一种事件,比如叫做OrderGeneratorEvent,而你的零散业务可能随时会变,加一些业务,减一些业务,而对于订单生成这个事件来说,它是唯一不变的,而我们需要把这些由产生订单而发生变化的事情拿出来,而拿出来的这些业务就叫做"领域事件".其中的领域指的就是订单生成这个聚合;而事件指的就是那些零散业务的统称.
它的主要几个抽象
在面向对象的编程世界里,做这种事情我们需要几个抽象:
领域对象事件标示:(标示接口,接口的一种,用来约束一批对象)IEvent
领域对象的处理方法,行为:(需要让那些零散的模块重写的方法,起个听起来熟悉的名字,叫它handle吧)IEventHandler=>Handle
事件总线:事件处理核心类,承载了事件的发布,订阅与取消订阅的逻辑,EventBus
某个领域对象:为了实现某个业务,而创建的实体类,它里面有事件所需要的数据,它继承了IEvent
某个领域对象的事件:它是一个事件处理类,它实现了IEventHandler,它所处理的事情需要在Handle里去完成
我的Demo的实现
一 结果图:
二 核心类:
IEvent接口,标示接口往往都是空的,呵呵
/// <summary> /// 事件实体基类 /// </summary> public interface IEvent { }@H_403_37@
IEventHandler接口,只有一个行为方法Handle
/// <summary> /// 事件处理接口 /// </summary> /// <typeparam name="TEvent">继承IEvent对象的事件源对象</typeparam> public interface IEventHandler<TEvent> where TEvent : IEvent { /// <summary> /// 处理程序 /// </summary> /// <param name="evt"></param> void Handle(TEvent evt); }@H_403_37@