业务建模:BoundedContext(有界上下文)
有界上下文BoundedContext在DDD是一个拓展的概念,在Evans经典DDD的书里应该是没有这个概念的,Jdon论坛上面的很少涉及BoundedContext文章。
就BoundedContext的设计上,提出几个自己的在这方面看法,抛砖引玉。
1、BoundedContext不同于Role(DCI)
它们看起来有点相似,但BoundedContext的描述语意会更加广泛一点。Role(DCI)根据角色直接捕捉角色与系统交互行为,更接近于业务需求,BoundedContext更强调则业务分析避免歧义.
比如,Security模块的User,Hr模块的Employee,Project模块的Member等,当涉及“系统使用者”的时候,系统管理员会认为说的是系统用户,行政总监会认为说的是员工,项目经理会说的是项目成员,这时候Role与BoundedContext就很类似了,除了类似Role这样的概念,BoundedContext还可以其他业务概念的歧义问题,如“Account”他可能是财务的概念也可能是其他业务的概念。
2、BoundedContext与Repository
领域内的Entity都应该置于一定的上下文语境下面,而Entity的重建在Repository内完成的,所以Repository对BoundedContext存在一定的依赖关系
3、BoundedContext与Domain Service
业务之间或业务模块之间存在一定的交互关系,而这种交互关系最终体现为BoundedContext之间的交互关系,
业务的交互可以领域服务(Domain Service)来实现。
一个系统,当从数据的角度考察的时候,表现为一系列查询和命令,当从业务的角度考察的时候,表现为一系列业务行为,
这个视角的不同最终体现为不同的Context之间的差异,其交互通过QueryService、CommandService、UnitOfWorkService来实现。
4、BoundedContext可做为CommandHandler与EventHandler的实现。
架构CQRS有太多概念很容易模糊掉关注领域核心的视线,所以才会把很多架构里元素放到BoundedContext中。
[该贴被clonalman于2012-10-11 23:33修改过]