Page 25 - 《软件学报》2021年第9期
P. 25
贾子甲 等:领域驱动设计模式的收益与挑战:系统综述 2649
Table 6 Data extraction items
表 6 数据抽取项
ID 数据抽取项 是否提供代码 解释说明
基础信息
D1 标题 否 文献的标题
D2 作者列表 否 文献作者的列表
D3 发表时间 否 文献正式发表的年月
D4 发表源 否 文献发表的期刊或者会议信息
研究背景
D5 研究形式 是 研究主要采用的形式,如案例研究
D6 贡献类型 是 研究所作贡献的类型,如提出解决方案
D7 研究问题 否 指导其工作开展的研究问题
研究问题相关信息
D8 DDDP 的应用情况(RQ1) 否 研究中 DDDP 应用实践情况,包括模式列表
所讨论的 DDDP 详细数据(包含 a~g 子数据抽取项) − −
a. 模式名称 是 该特定 DDDP 的名称
b. 模式特征 否 区别于其他 DDDP 的典型特征
c. 模式意图 否 该 DDDP 被引入的目的
D9
d. 范例用法 否 该 DDDP 的使用建议或者范例用法
e. 收益(RQ2) 否 应用该 DDDP 的实际价值
f. 挑战(RQ3) 否 应用该 DDDP 所需要面对的问题和挑战
g. 缓解方法(RQ3) 否 应对相应挑战的技巧或解决方案
2.3.2 数据合成方法
为了深入了解 DDDP,本研究的数据抽取过程产生了大量的定性数据.此外,在 DDDP 相关的基础研究中,同
一个词语在不同的上下文中可能具有不同的含义,比如“服务(service)”可能表示一种 DDDP,但也可能表示软件
工程中非常普遍的“Web 服务” [25] ,这为数据合成造成了一定阻碍.因此,本研究需要使用一种合适的定性数据合
成方法,来保证能够合成出语义合适的结果.
本研究在进行定性数据合成的过程中,使用了来源于扎根理论(grounded theory) [26] 的两个抽象层次的编码
方法,即开放码(open codes)和轴向码(axial codes) [27] .本研究所使用的编码方法是 Braun 和 Clarke [28] 提出的主题
分析(thematic analysis),我们利用该方法获得了各种定性数据(见表 6)的聚合结果.
这里简单介绍数据合成过程的一些细节.在熟悉了基础研究文献之后,两位作者分别对提取到的原始文本
进行开放编码,即识别文本的语义内容和隐含内容,并将其与原始数据一起记录下来.例如,示例抽取数据的开
放编码结果是“更好地理解领域需求”和“更有效的沟通”.当所有的数据集都完成了初始编码后,我们对不同的
代码进行分析和比较,并将它们组合成主题.例如,开放编码“更好地理解领域需求”被整理成主题“促进业务理
解”.之后,我们进一步对于候选主题进行了细化,比如因为证据不足而放弃了某些开放编码.在这个过程中,
NVivo 被用来管理编码和主题之间的层次结构.此外,考虑到这一过程极大地依赖于经验和感知,在执行这一阶
段工作之前,所有数据分析和合成的参与者都被要求仔细研读 DDD 相关的主流著作 [1,3,4,20,29] .
3 研究结果
领域驱动设计模式的应用最终表现在一系列相关活动中,因此,本研究识别出了应用 DDDP 的相关活动,并
以此为基础来组织应用 DDDP 所带来的收益与挑战.如图 2 所示,根据基础研究 [30] ,应用 DDDP 的相关活动主要
分为 4 类,即领域分析(domain analysis)、领域设计(domain design)、领域模型实现(domain model implementation)
和普适性活动(umbrella activity),由此组成了 DDDP 应用框架,并且上述这些活动与 Bruegge 和 Dutoit [31] 所描述
的传统软件开发活动,即需求获取和分析、设计和实现及测试相对应.
对于 DDDP 应用框架的进一步说明如下.
• 领域分析是指与领域专家一起探索领域知识的过程.经过领域分析,将得到初始的领域模型;
• 领域设计是指将模型分成不同部分(每个部分对应着独立的限界上下文),然后扩展和细化每个限界上