如果我们将限界上下文理解为是对工作边界的控制,则上下文之间的协作实则就是团队之间的协作,高效的团队协作应遵循“各司其职、权责分明”的原则。从组织层面看,需要预防一个团队的“权力膨胀”,导致团队的“势力范围”扩大到整个组织;从团队层面,又需要避免自己的权力遭遇压缩,导致自己的话语权越来越小,这中间就存在一个平衡问题。映射到领域驱动设计的术语,就是要在满足合理分配职责的前提下,谨慎地确保每个限界上下文的粒度。
当然,一个高效的组织,其内部团队之间必然不是“老死不相往来”的陌生客。职责的合理分配,可以更好地满足团队的自组织或者说自治,但不可能做到“万事不求人”,全靠自己来做。如果什么事情都由这一个团队完成,这个团队也就成为无所不能的“上帝”团队了。Vaughn Vernon 就认为:“上下文映射展现了一种组织动态能力(Organizational Dynamic),它可以帮助我们识别出有碍项目进展的一些管理问题。”这也是我为何要在识别上下文的过程中引入项目经理这个角色的原因所在,因为在团队协作层面,限界上下文与项目管理息息相关。
领域驱动设计根据团队协作的方式与紧密程度,定义了五种团队协作模式。
合作关系(Partnership)
合作(Partnership)是一个美好的词语,但在软件设计中,却未必是一个正面的褒义词,因为合作得越多,就意味着依赖越多。Vaughn Vernon 在其著作《实现领域驱动设计》中如此定义这种关系:
如果两个限界上下文的团队要么一起成功,要么一起失败,此时他们需要建立起一种合作关系