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.建模是软件设计的一项重要活动,它决定了子系统的结构、接口、
   29   30   31   32   33   34   35   36   37   38   39