多个domain黑匣论

理论总是绕口的,特别对我这种懒人。只能说我懒,不能说理论无用。

那么标题“多个domain黑匣论”,简单的来说就是让领域层本身可以分为数个领域,下面以jsdm代码为例(记住:jsdm是nodejs框架还不成熟,能掌控的眼下只能是寡人,呵呵,推荐大家用banq的java框架,以下不要纠结代码本身,而是探讨思想):



// 系统可能很庞大,实体也可能很多,那么这时候需要划分几个domain。
// 每个domain 具备完整的CQRS内的部件,比如 aggre / command handle / event hande
var domain1 = require("jsdm")();
var domain2 = require("jsdm")();
var domain3 = require("jsdm")();

.....
// 应用层调用domain
domain1.exec("转账" ... );

......
// 3个领域之间用事件关联和交互

domain3.on("xxx event",function(){
domain1.exec("发货" .... )
})

domain1.on("xxx event",function(){
domain2.exec("xxx" .... )
})

领域domain 之间只能通过 domain.exec 调用内部而无法得知domain内部任何细节信息,你只能exec 执行 或 on 监听 领域层,domain永远是个黑匣。

我猜测多个领域实际是多个上下文。

每个上下文包含一个领域聚合,多个上下文之间整合实际就是企业业务集成EAI。

每个领域内部是黑盒,多个领域聚合只能通过聚合根实体交互,比如发送事件或消息,这样比较更加松耦合,通常多个领域之间通过一个企业总线BUS来沟通,如果城市和高速公路一样。这实际是一种领域驱动的SOA概念。

最新一篇文章谈REST和DDD上下文如何实现企业整合:
http://www.jdon.com/soa/resteai.html

呵呵扯远了,不过也是相关话题。

恩,有道理, domain之间的调用,也应该是互相能引用的。



domain1.on("xxx event"...)

这个代码放在应用层,我发现错了,应该放在领域的eventhandle里,也就是领域之间能够相互知道,我得改一下jsdm了。

能实现类似的代码


var domain = jsdm("domain1")

然后 domain2 能查询到domain1


// domain2内部的 event handle代码
var domain1= jsdm("domain1"); // 得到domain1

// domain2 内的 eventHandle 监听domain1的事件
domain1.on("xxx event ",function(){
// domain2 监听到domain1 的事件,那么就做一些猥琐的事
})

希望代码能反映点思想理论。呵呵


[该贴被brighthas于2013-12-01 11:07修改过]