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 /
建模所使用的技术