2010年11月15日 22:58 "flyzb"的内容
我并不认为DCI和事件是对立的,相反它们是从不同角度去描述对象行为 ...
嗯,这句话很有启发,让我联想到Scala就是将异步事件消息和DCI结合起来,当我们编写第一Actor(相当于类)时,是使用DCI的方式加入这个Actor对应角色的行为职责;而Actor成为对象在运行时,Actor之间是通过异步消息事件(邮箱)通讯的。
DCI更侧重的是一种行为混合注射方式,是编程阶段一种模式,因此,将DCI归结为结构型模式可能更合适,就像MVC模式更多是一种结构型模式一样,MVC模式已死,而MVC中C是Mediator行为模式,DCI中I代表行为模式。
而事件就是一种完全运行状态名词,可以和“相互作用”直接对应。
重新想想前面我说jdonframework面临方向选择,也就是事件和DCI选择,为什么有这困惑,是不是Java这个语言不能象Scala那样,完美地将事件和DCI有机结合在一起呢?
总结一下:DCI概念更接近业务建模(业务建模代表客观事实),因此使用DCI可以让我们抛弃传统“类”概念,而直接以一种职责分配思维方式来编程,去除了业务建模和技术设计实现的鸿沟,也就是翻译转换过程;而业务建模中相互作用的设计,则可以通过事件或直接调用(DCI内部)来完成。
当然,事件分异步和同步,同步事件实际就是直接调用,这些都可以根据实体的聚合边界来确定,聚合体之间使用异步,最大可能松耦合;聚合体内部直接调用,一个聚合体类似Scala中的一个Actor。
感谢flyzb让我思考清楚这个问题,顿悟快乐很好,下面我想思考的是:如何在jdonframewok(jivejdon)将事件和DCI柔和在一起,反正也有纯粹的DCI API开源包了,也欢迎有兴趣者一起来推进Jdonframework重大架构发展。