>这里我将业务对象的行为理解为事件,也就是业务对象的行为(或动作)操作定义为事件操作!
你的疑问可能和这段理解有关,对象的行为由事件触发,但是不代表两者是同一个概念。
如果你区分了对象的行为和事件,那么就会思考事件到底是什么,其实在传统技术架构比如SSH中,我们的对象行为是被用户的请求触发的,用户的请求提交给Struts,然后通过Struts 的Action提交到Spring的服务,调用服务的一个方法行为。
这个思维方式是一种请求/响应思维,而我们现在要以事件替代请求/响应(request/response),这就是EDA最大不同。
因为思维方式不同,那么肯定有不同的框架,Jdonframework就定位在事件角度。
上面流程就变成:用户发出一个命令command,被富领域模型的行为接受处理,在这里会有多个命令操作同一个模型的同一个状态的问题,一般要引入堵塞锁,Jdonframework通过Disruptor的队列实现某个时刻只有一个线程调用模型的行为进而修改状态,非堵塞无锁。
第二点,当模型中的状态被修改以后,会有一个事件触发,称为领域事件,实现EventSourcing,关于DDD和ES的关系见:http://www.jdon.com/46041
除了对业务的思考方式不同,技术特点也不同:
比如在一个典型SSH应用案例中,用户界面中的用户请求(在浏览器中,REST客户端或其他地方)发送到web层进行解析,然后分发到中间件服务组件,通过它的高速缓存然后下推到数据库。如果这些层中任何一个层都不参与以下操作:阻塞调用数据库,依靠共享的易变状态,使用昂贵的同步操作进行调用,那么整个请求处理响应的流水线就不会停顿,用户就不会将遭受延迟通过增加和减少的可扩展性。
An application must be reactive from top to bottom
一个应用必须从顶层到底部都是reactive的。
http://www.jdon.com/45811#23143632
Jdon框架提供了整个技术堆栈都是可异步和高并发的。
[该贴被banq于2014-01-02 20:00修改过]