DDD中问题空间和解决方案空间是一个伪命题

21-01-27 banq

通常认为解决方案空间是绑定到问题空间的上下文(这就形成了有界上下文),问题空间是真实存在,而解决方案空间是人的主观设计实现。

请注意:这里潜台词引入了主观和客观的区别,问题空间是客观真实,解决方案是人的主观,看上去解释得非常完美,而且很有逻辑,但是最大漏洞是:问题空间可能并不是真实的存在,而是一个人脑袋里认为的那个问题空间,如果两个人认为的问题空间不同,谁来做裁判判断谁的问题空间才是真实的呢?所以,这段话的问题是把人类自己居于上帝位置上思考,置身于时空之外使用主观和客观二分法,这种不考虑人类自身参与影响的哲学是相当愚蠢的。

其实,问题空间等同于康德的物自体,真实问题空间是我们无法全面了解掌握,我们获得需求的方式通常是从用户自己的解决方案还原问题空间,不是用户自以为是用解决方案替代问题,而是他认为的问题空间其实通过其主观设定的上下文已经被解决方案影响了,掺入了个人偏见,没有人可以扮演上帝公正客观地还原问题空间。(反过来设想:如果我们能客观公正在短时间内掌握问题空间,还会遭遇需求变化导致措不及防吗?软件工程是一个学习过程,代码只是学习的副产品

从这个意义上看,问题空间和解决方案空间的划分是一个伪命题,只是一种初级认识手段而已,在真实实战中是无法凭借这种方法实操的。引入这两个概念只会增加DDD术语的复杂性,反而导致初学者望而却步,甚至误导初学者,某些初学者会高举“自己认识的问题空间就是真实的问题空间”这面真理大旗(他没有意识到所谓真实其实是自己认为的真实),并为自己坚持“真理”而自豪与奋斗、甚至固执己见,原地踏步直至落后被淘汰。

参考:

幽默:为什么DDD的Bounded Context翻译为"有界上下文"?

软件设计的目标是创建适合人类思维的片块 - KentBeck

 

                   

1
猜你喜欢