领域驱动设计模式的收益与挑战:系统综述∗
2021-11-09贾子甲钟陈星周世旗荣国平
贾子甲,钟陈星,周世旗,荣国平,章 程
1(南京大学 软件学院,江苏 南京 210023)
2(计算机软件新技术国家重点实验室(南京大学),江苏 南京 210023)
3(安徽大学 计算机科学与技术学院,安徽 合肥 230601)
领域驱动设计(domain-driven design,简称DDD)是一种在软件设计中应该遵循的思维方式,其目标在于加快具有复杂需求的软件项目的研发速度[1].DDD 中最重要的理念是通过构建领域模型来解决软件开发的复杂性问题[1],因为在大多数软件项目中,最困难的往往是解决业务领域复杂性,而非技术复杂性.DDD 的一个显著特征就是设计与开发的绑定,DDD 强调软件设计概念必须在开发过程中得以成功实现[2].为了实现以上这些愿景,在DDD 方法中,将一组设计实践、技术和原则合并为标准模式,即所谓的领域驱动设计模式(domain driven design pattern,简称DDDP)[1],它们则构成了领域驱动设计的主体.
自从2004年“领域驱动设计”被首次提出以来[1],这一概念随着软件开发组织的广泛应用逐渐流行起来.一些实践者为DDD 社区做出了巨大的贡献,例如:Nilsson[3]讲述了如何通过结合DDD 来构建.NET 应用程序,Vernon[4]对于DDD 的概念给出了新的解释,Millett 和Tune[5]阐释了对DDD 的实践、模式和原则的全面理解.同时,DDD 也被IBM[6]、阿里巴巴[7]等大型企业采用,以支撑大规模应用.此外,DDD 社区也活跃着多个面向工业界的会议,例如DDDSummit(https://ddd-summit.de),EXPLORE DDD(http://exploreddd.com)和DDDConference(http://www.ddd-china.com).
DDD 的立足点是解决软件开发中的复杂性问题,这顺应了当今软件系统复杂度不断提升的趋势;此外,DDD 与当前主流的分布式架构设计风格——微服务架构(micro service architecture)[8]的关系非常紧密[9,10].而近年来,微服……
