Page 34 - 《软件学报》2021年第9期
P. 34
2658 Journal of Software 软件学报 Vol.32, No.9, September 2021
泛接受,但是其对于如何在系统性软件开发过程应用 DDDP 并没有提供详细描述 [30] .这使得应用领域驱动设计
的活动变得模糊不清,成为实践者们面临的主要挑战,从而影响了适用性.
• 缓解方法
解决 C15 [37] 的一种途径在于聚焦于信息架构 [64] ,并在沟通中使用统一定义的术语(通用语言).为了提供对
模型访问和变更管理的支持(C16),文献[48]论述了在分布式微服务开发背景下架构决策的优缺点,包括完全模
型访问和部分模型访问,并提倡采用明确的策略来规范模型管理.为了应对 C17,文献[30]初步确定了 DDD 开发
活动集,并与需求确定和分析、设计和实现以及测试 [31] 等传统软件开发活动保持一致.
4 讨 论
本节综合了基础研究文献中关于应用领域驱动设计模式的现有证据,对于应用 DDDP 所面对的 3 个问题进
行了讨论,包括应选择战术设计还是战略设计、存在哪些机遇以及如何应对挑战.
4.1 战略设计与战术设计
[4]
在 DDDP 中,从战略设计和战术设计角度分别提供了一系列方法.战略设计更关注业务的宏观战略方向 ,
而战术设计则聚焦于特定领域模型.本研究发现:相比于战术设计,在 DDD 社区中,实践者更趋向于应用战略设
计(18.2%VS.45.5%).这可能是由于:对于企业而言,软件系统的战略设计决策更具有影响力.举例而言:战略设计
能够降低分析软件架构时的认知复杂度,并能够促进系统的组件化.
需要强调的是:实践者不应只关注战术设计,而忽略战略设计.过分专注于技术层面可能会导致领域对象之
[4]
间的细微差异被忽略,从而导致模型的错误融合,甚至会使系统变成大泥球(big ball of mud) .Millett 和 Tune [5]
认为,这正是许多应用 DDD 的项目失败的原因.因此,本文建议实践者应该同时兼顾战略设计和战术设计,同时,
根据自身业务场景来权衡战略性设计和战术设计的使用.
4.2 存在的机遇
现有经验证据(empirical evidence)证明了 DDDP 在软件开发实践中的实际应用价值.然而,在目前的基础研
究文献中,仅有 10 种 DDDP 被明确指出对软件开发有所帮助,而其他模式的实际价值还缺少相关证据的支持.
此外,诸如 CQRS(command query responsibility segregation,命令查询的责任分离) [65] 等 DDDP 的新兴模式
经过社区的发展已经日趋成熟,但由于这些模式并未包含在 Evans 在 2014 年所提出模式列表中,因此学术界目
前还缺少相应的研究工作.本文关注的基础研究文献中也缺少对这些模式的相关证据.
[1]
需要注意的是:虽然 DDDP 是领域驱动设计标准化设计的重要内容 ,但对于 DDD 而言,深入理解领域知
[1]
识、迭代建模、统一模型与实现等整体愿景更为关键 .为了实现以上愿景往往需要综合应用多种 DDDP,同时
也需要保持团队组织形式与软件设计理念的一致性.
虽然应用 DDDP 可以为软件开发带来良好的效果,但从现有研究来看,它对其他方面的帮助并不明显.一方
面,DDD 强调开发人员和领域专家及其他涉众的协作,那么应用 DDDP 来改善团队组织结构似乎是合理的,比如
上下文映射能够明确地展示不同组织之间的动态关系,因此它可能适用于组织大型软件项目的开发工作;另一
[4]
方面,Vernon 认为,应用 DDD 可能会使软件过程的治理问题暴露出来.总的来说,现有研究缺乏对 DDDP 的这
些方面的讨论,DDDP 在这些方面的具体作用仍需要更多的实证研究来验证.
4.3 应对挑战
[4]
正如 Vernon 所说的,使用 DDD 时仍需要面对诸多挑战.在本研究的统计数据中,与挑战相关的数据的来源
研究文献比较集中,这表明在目前的学术界研究中,还没有对于应用 DDDP 所面对的挑战达成一致共识.这可能
是因为现有的大多数研究工作所关注的主题都比较分散.我们推测:随着 DDD 研究的不断深入,社区将对于应
用 DDDP 所面临的挑战逐渐会达成共识.
经过聚合分析 [28] ,可以将本文所报告的应用 DDDP 所面对的挑战划分整理成 4 种类型,见表 10.
• 建模本身的复杂性:C2~C4,C10,C11.建模是软件设计的一项重要活动,它决定了子系统的结构、接口、