近日有人问过我一个问题,如何给人介绍DDD(领域驱动设计)?
我答得不是很好,因为我从未的考虑过在没PPT的情况下,该如何有效地让人短时间内理解DDD的理念.
是阿,这么复杂的理念,该如何让人在短时间内建立印象呢?
DDD有学习曲线的
DDD是有学习曲线的,而且可能很陡.
它是对传统的以数据为中心建模方式的反思结果,是关于”OO Done Right”.
如果你的业务很简单,CURD就能满足的话,那没必要改造成的DDD的方式,但这并不妨碍你去了解一下什么是DDD.
DDD不适合我们?
Q: DDD不适合我们这样的公司,我们的软件开发都是交给外包团队来做的,通用语言没必要.
这个问题我答得不好,因为我在前面的介绍里漏掉了”通用语言”,我陷入了先介绍战术细节的泥潭之中了.
是的,战术部分不一定适合所有的场景,但是战略部分还是很值得一试的.
战术与战略
战术是具体的,它是关于对象设计,程序架构,持久化策略等等.
战略是抽象的,关于问题领域分解,通用语言,上下文映射关系等等.
通过对问题域的拆分,才能分辨出那些是核心域,那些是子域(包括支持子域和普通子域).
通常来说,子域部分适合外包出去,核心域处于自己控制的范围较好.
通用语言的最大作用是降低不同团队之间的沟通成本,如果业务逻辑沟通不顺畅的话,很大概率上会带来项目计划的延期.
上下文映射关系反映的是团队之间的关系,也适用己方与外包团队的关系.
认清正确的团队关系,能够更好的做系统架构上的决策.
反思
思考问题的时候,要从大局出发,先战略再战术.