Page 30 - 《软件学报》2021年第9期
P. 30

2654                                 Journal of Software  软件学报 Vol.32, No.9,  September 2021

         实现模块化.文献[52]的经验表明:实现上下文映射可以帮助开发人员对系统产生更深刻的认识,从而进一步改
         进系统架构;其次,识别和关注核心域(core domain)可以提高资源利用率,从而以更高效的方式改善软件架构;再
         次,分层架构(layered architecture)能够将领域模型与其他关注点分离开来,有助于探索领域知识,也有助于确保
         各层之间的高内聚和低耦合           [54] .
             由于 DDDP 中的通用语言能够作为团队内部的共享术语来降低沟通中的噪声,所以在设计领域模型和分
         析代码的过程中,通用语言能够为不同的涉众提供高效的通信方式(B7).正是因此,领域专家的参与度得以大大
         提升,使得更多高价值的领域业务见解在团队内部分享和传递.更好地理解业务(B8)能够使得软件与其所在的
         领域保持一致,这也正是领域驱动设计的基本观点                  [4,29] .另一方面,对于领域模型特别是核心域的关注,使开发人
         员能够更好地理解正在开发的软件和其未来愿景,有助于架构决策的制定,如开发资源的高效利用(B10)和系统
         级优化.
             最后,应用 DDDP 能够帮助复杂软件架构以更加敏捷的方式实现演进(B9),并且能够帮助团队应对具有较
         大领域复杂性的软件系统开发难题(B11).

         3.4   应用DDDP所面对的挑战(RQ3)
             总结现有研究中对于应用 DDDP 所带来的挑战,能够为学术界提供一些未来的研究方向.然而对于实践者
         而言,其往往更关心应对挑战的策略和方法.尽管我们难以在现有研究中找到应对 DDDP 所带来挑战的“银弹”,
         但研究文献中所提出的一些方法,却能够帮助实践者在一定程度上缓解应对挑战的难度,我们将其称为挑战的
         缓解方法.在本研究中,我们首先在基础研究中提取了应用 DDDP 的 17 个挑战,之后,3 位研究者根据所得到的挑
         战列表和系统文献综述过程所收集的证据,独立抽取并合成应对挑战的缓解方法,经过分析、讨论与整合,最终
         得到了 17 个应对挑战的缓解方法.
             表 9 列出了在领域分析、领域设计、领域模型实现和普适性活动这些活动中,应用 DDDP 可能面临的挑战
         以及相应的缓解方法.接下来,本文将分阶段对其进行详细介绍.

                                   Table 9    Challenges of applying DDD Patterns
                                      表 9   应用 DDDP 所需要面对的挑战
                  ID        描述         计数    相关模式及研究文献                  缓解方法
                                                  领域分析
                      难以保证领域专家参与                 MultiPattern
                  C1                     1              [39]               /
                       获取领域知识过程                 (UL,BC,CD)
                                                  领域设计
                                                               M1:考虑组织结构  [30,44]
                                                               M2:确定职责的边界   [41]
                         难以确定限界                      [51]      M3:通过分析用例的工作流
                  C2                     1         BC                     [49]
                         上下文的粒度                                  聚类相关功能
                                                               M4:利用事件风暴探索领域     [42]
                                                               M5:比较不同团队的领域模型     [42]
                      难以对领域进行优先级                     [52]
                  C3                     1         CD                      /
                      排序并确定核心领域
                  C4   难以确定聚合的粒度         1      Aggregate [58]             /
                      领域层之外的其他层                      [30]                              [30]
                  C5                     1         LA          M6:使用其他工件来补充遗漏的规范
                         缺少指导规范
                                                               M7:为建模定义 UML 配置文件   [44]
                       缺少对模型形式化              MultiPattern(UL,BC) [44] ,
                  C6                     2                [47]  M8:用于表达领域模型及其关系的
                         表达的支持               MultiPattern(UL,BC)          [47]
                                                                 语义的元模型
                       领域专家难以理解                      [46]
                  C7                     1         UL                      /
                       建模所使用的技术
   25   26   27   28   29   30   31   32   33   34   35