领域驱动设计(DDD)这一概念由埃里克·埃文斯(Eric Evans)于2004年提出。领域驱动设计分为两个阶段:一是以一种领域专家、设计人员、开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念;二是将这些概念设计成一个领域模型,从领域模型驱动软件设计,用代码来实现该领域模型。由此可见,领域驱动设计的核心是建立正确的领域模型。因此,领域驱动模型设计的核心是以事件为出发点,围绕核心事件的设计范围来圈定事件的领域。图5-6描述了领域驱动设计的基本过程。
图5-6 领域驱动设计的流程
第一,获取用户需求:通过拜访相关领域的专家、负责人、当事人等进行访谈,寻求他们对需求的理解,得到很多信息。
第二,从这些信息中抽取与指令相关的信息,找到指令的集合。
第三,围绕这些指令圈定领域范围,领域范围的圈定是不断变化和完善的。(www.xing528.com)
第四,找出领域中的核心事件。
第五,对驱动领域的核心事件进行分解,去归一化处理。由于领域的核心事件中包含多个指令集合,在后期数据处理时必须去归一化处理,使各个指令完成本职工作。所谓的去归一化也就是解耦操作,包括事件存储和读数据的状态复原。
在进行领域模型抽取时要注意以下两点:
其一,设计领域模型时不能以用户为出发点去思考问题,不能老是想着用户会对系统做什么,而应该从客观的角度,根据用户需求、功能间的关系挖掘出领域内的相关事物,思考这些事物的本质关联及其变化规律。
其二,领域模型是排除了人之外的客观世界模型,但是领域模型包含人所扮演的参与者角色。一般情况下,不要让参与者角色在领域模型中占据主要位置,如果以人所扮演的参与者角色在领域模型中占据主要位置,那么各个系统的领域模型将变得没有差别,因为软件系统就是一个人机交互的系统,都是以人为主的活动记录或跟踪。比如:在论坛功能中如果以人为主导,那么领域模型就是人发帖子、人回帖子、人结帖子等等。在DDD的设计中,如果是以人为中心的话,就变成了托运人托运货物、收货人收货物、付款人付款等等。因此,当我们谈及领域模型时,已经默认把人的因素排除了,因为领域只有对人来说才有意义,人是在领域范围之外的,如果人也划入领域,领域模型将很难保持客观性。领域模型是与谁用和怎样用无关的客观模型。归纳起来,领域建模是建立虚拟模型让现实中的人使用,而不是建立虚拟空间去模仿现实。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。