Contexts are the new objects一文提出DCI架构中Context是一种新的对象,不同于我们现在的对象语法。
当我们从过程化编程转移到面向对象编程时,我们把输入参数id作为对象的指针,如下:
面向过程写法:注意id作为输入参数
procedure(id,param1,param2)
面向对象写法:id被隐含,实际作为对象的标识了。
object<id>.method(param1,param2)
实现DCI一般是在无态服务中,服务提供了DCI实现的场景,那么语法就如下编写:
service.method(id1,id2,id3,param1,param2)
按照前面面向过程到面向对象的转换规律,我们可以将场景实现更简单更OO:
context<id1,id2,id3>.interaction(param1,param2)
id1 id2 id3隐含在context中,说明一个场景是由三个方面因素决定的,是动态的。
这样我们再也不必一个个先寻找构成context的对象,确保他们OK正常,确认他们之间关系等等,所有这些都在Context 构造中实现(正如一个对象初始化构造一样), 这样,我们就可以关注如何使用Context,而不必关注如何构造(工厂模式思想延伸),我们可以关注场景的行为了.
作者认为场景对象会替代无态服务。
http://www.artima.com/forums/flat.jsp?forum=270&thread=287546&start=0&msRange=15
个人观点:
我之前提到两种实现方式:
Domain Events:服务是事件的入口,外部事件进入服务后,被服务传递给领域模型,由领域模型驱动相关服务或仓储或相关算法完成一定职责行为。
Context对象:专门设立一个场景Context对象,服务-->场景,在场景中注射服务或仓储或算法,完成相关场景的职责行为。
看来没有必要再服务-->场景了,直接使用场景替代服务即可,否则多个环节干嘛,也可以使用场景替代MVC中Controller,更加简化。
[该贴被banq于2010-04-06 17:39修改过]