DDD软件核心复杂性应对之道

2 语言的交流

业务中的卫语句是否可以使用策略

比如说材料评分分数是否合法.

1
2
3
4
5
6
7
8
9
10
11
12
class test {
void test() {
// 当前卫语句是否可以替代为策略
if (material.getScore() > 100 && material.getScore() < 0) {
return -1;
}
// 替代为策略之后
if (!material.isAllowed()) {
return -1;
}
}
}

新的 isAllowed方法

1
2
3
4
5
class test {
public boolean isAllowed() {
return this.score > 100 && this.score < 0;
}
}

现在所有开发者都知道了,分数合法性是一个独特的策略,且实现是独立的。

卫语句:起保护作用的语句,可以减少嵌套。

策略模式(strategy),定义一组算法,将每个算法封装起来,并且使它们之间可以互换。更强的可扩展性、可维护性和可重用性。

通用语言(UBIQUITOUS LANGUAGE)

没有通用语言的坏处

领域专家的术语与开发人员的术语差距很大,两者之间的信息交流,就需要互相翻译,甚至领域专家之间,开发人员之间也需要互相翻译。

这些翻译使模型概念变的混淆,以至于破坏代码的重构。

翻译工作导致各类知识和想法无法结合到一起,从而影响对模型的深入理解。更不必说记录到代码或文档中了。

任何一种行话都不能成为公共语言,因为它们无法满足所有的需求。

翻译工作加在一起,开销太大了,并且还要冒着误解的风险。

得到通用语言

DDD中讲的是将模型作为语言的中心。确保团队在所有交流活动和代码中坚持使用这种语言。在画图、写东西特别是讲话时也要使用这种语言。

解决交谈中的术语混洗问题;

密切监视那些将会妨碍设计的有歧义和不一致的地方。

本文地址: https://github.com/maxzhao-it/blog/post/65147/