Page 19 - 《软件学报》2021年第9期
P. 19
贾子甲 等:领域驱动设计模式的收益与挑战:系统综述 2643
Abstract: In recent years, domain driven design (DDD), as a software design method, has gradually become popular in the industry and
formed several inherent paradigms of application, namely domain driven design pattern (DDDP). However, the software development
community still lacks a comprehensive understanding of the role of DDDP in software projects. Objective: This study aims to reveal the
application status of DDDP, including which DDDP is applied to software development, the benefits, challenges, and mitigation methods
for challenges. Methods: In our study, a systematic literature review is performed to identify, screen, summarize and analyze the relevant
literature published between 2003 and July 2019. Results: Through the combination of manual retrieval, automatic retrieval and
snowballing, this paper covered 1 884 relevant literatures, and after screening, 26 high-quality literatures were finally obtained,
corresponding to 26 independent studies. This study summarized theoverview of DDDP in the primarystudies, including the 11 benefits,
17 challenges and the mitigation methods of challenges for the DDDP which applied in software development. Conclusion: DDD can help
practitioners design software better since its prominent emphasis on domain knowledge, but there are still some challenges when applying
DDD patterns. While these mitigation methods may tacklethe challenges to a certain extent, there are also some deficiencies remained.
This study fills in the knowledge gaps in this field through SLR. Considering the mismatch between the practical value of DDDP and the
current theoretical maturity, the industry and academia should pay more attention to this field in the future.
Key words: systematic literature review; empirical study; domain-driven design; software design
领域驱动设计(domain-driven design,简称 DDD)是一种在软件设计中应该遵循的思维方式,其目标在于加
[1]
快具有复杂需求的软件项目的研发速度 .DDD 中最重要的理念是通过构建领域模型来解决软件开发的复杂
[1]
性问题 ,因为在大多数软件项目中,最困难的往往是解决业务领域复杂性,而非技术复杂性.DDD 的一个显著
[2]
特征就是设计与开发的绑定,DDD 强调软件设计概念必须在开发过程中得以成功实现 .为了实现以上这些愿
景,在 DDD 方法中,将一组设计实践、技术和原则合并为标准模式,即所谓的领域驱动设计模式(domain driven
[1]
design pattern,简称 DDDP) ,它们则构成了领域驱动设计的主体.
[1]
自从 2004 年“领域驱动设计”被首次提出以来 ,这一概念随着软件开发组织的广泛应用逐渐流行起来.一
[3]
些实践者为 DDD 社区做出了巨大的贡献,例如:Nilsson 讲述了如何通过结合 DDD 来构建.NET 应用程序,
[4]
[5]
Vernon 对于 DDD 的概念给出了新的解释,Millett 和 Tune 阐释了对 DDD 的实践、模式和原则的全面理解.
[7]
[6]
同时,DDD 也被 IBM 、阿里巴巴 等大型企业采用,以支撑大规模应用.此外,DDD 社区也活跃着多个面向工
业界的会议,例如 DDDSummit(https://ddd-summit.de),EXPLORE DDD(http://exploreddd.com)和 DDDConference
(http://www.ddd-china.com).
DDD 的立足点是解决软件开发中的复杂性问题,这顺应了当今软件系统复杂度不断提升的趋势;此外,
[8]
DDD 与当前主流的分布式架构设计风格——微服务架构(micro service architecture) 的关系非常紧密 [9,10] .而
近年来,微服务架构已经越来越多地应用在各类大型软件系统当中.上述技术特点和发展趋势,使得 DDD 在业
界越来越流行.
然而,领域驱动设计也面临着一些困境.在学术研究方面,相比于在业界实践中的流行程度,DDD 相关的研
究关注度明显不足.在业界实践方面,想要成功地在软件开发中实践领域驱动设计,特别是 DDDP,往往具有一定
[4]
的挑战性.开发人员在应用限界上下文(bounded context)、聚合(aggregate) 等比较抽象的 DDDP 时往往感到非
常困惑,比如在分布式系统中应用限界上下文模式就存在一定困难 [11] ,这在最近的一项微服务相关访谈研究 [12]
中得到了证实.
而 DDDP 的实际应用情况如何?其能够为软件开发带来何种收益?又将造成什么挑战?上述问题目前尚未
得到较为系统化的回答.因此,为了更加系统地了解 DDDP 的应用现状、收益、挑战及相应的解决方法,本文进
行了系统文献综述(systematic literature review,简称 SLR)来调研已发表的基础研究(primary study).系统文献综
述是软件工程领域的一种主要的“循证”方法,该方法通过合成当前研究中的高质量证据,以减少单个基础研究
的偏差,从而达到辅助软件项目的决策过程的目的.自从这种“循证”方法被软件工程社区采用以来,各领域的许
多重要研究都应用了系统文献综述这一方法 [13−15] .考虑到软件开发组织能够从这种系统文献综述中获取宝贵
经验,并且目前的学术界尚未发表有关领域驱动设计的综述性文章,因此,本文的工作对于学术界和产业界均具
有一定的借鉴意义.