很多关于“领域驱动设计”的文章、书籍和课程,包括国外和国内,存在两个问题:(1)伪创新(2)无领域。
(1)伪创新
初中数学里要学习全等三角形、相似三角形、SSS、SAS……,到了高中以后学了正弦定理、余弦定理等解三角形的知识……就不会再回去用初中的方法解题了。
但是,不是所有人都能学会高中的知识,比如说张三。
张三可能会这样解释:
我这个人能力比较弱,只能掌握全等三角形、相似三角形的方法。
这样的说法没有问题。
张三还可能会这样解释:
这个题目比较简单,用全等三角形、相似三角形的方法做足够了,而且这样更方便广大人民群众理解。
这样的说法也可以。不过,竞争对手不是傻子,市场中哪里有什么"简单题目"!能带来利润的题目都很复杂。
但是,张三如果这样说:
全等三角形、相似三角形的知识比高中三角函数的知识更深刻。
这就是自欺欺人了。
更要警惕的是,有一个李四,也许和张三一样没有掌握高中方法,也许掌握了高中方法但是为了忽悠张三们,偷偷把"全等三角形"改名为"叠合三角形",然后和张三宣传:
我发明了"叠合三角形"新方法,比高中的三角函数有用,三角函数过时了。
这就是伪创新。
软件开发领域也有这样的现象。有些人,对已有的知识一无所知或一知半解,也不喜欢思考和研读文献,凭着一些朦胧的“领悟”,就“创建”了一套“新”方法。
这些人的文章里经常有“我发现***”、“和某某讨论某个问题,突然领悟了****(没错,他们不喜欢阅读和思考,但喜欢在封闭的小圈子里“讨论”)”这样的文字。
伪创新的危害是它带来“进步”的错觉,可能会让团队抛弃当前虽然不是很好但还过得去的做法,去拥抱伪创新。
就像有人得了癌症,按照医院当前的治疗方式预计能生存三年,结果在医院门口被塞各种小报,上面各种灵丹妙药"癌必灵"、“克癌灵”,而且还便宜一些……于是,果断放弃治疗,拥抱……。
为什么团队会去拥抱“伪创新”?
每年都有学员找我。
学员:老师,能不能来给我们团队讲****?
我:之前不是教给你们建模方法了吗,按照改进指南去做,先用好一点,就比这个强啊!
学员:就是觉得您那个太难了,感觉这个比较简单,很适合我们团队……
(无语)当然“适合”了。培训完后也不复习,自测题做不对也懒得再做,因为太“难”了。于是,看到“容易”的方法就扑了过去。
“伪创新”的方法很容易学!这就迎合了很多人的需要。在这些人看来,“伪创新”不用学习复杂的方法和做艰苦的思考,只需要简单的拍脑袋,就可以解决复杂的问题并且获利,实在是太爽了(通过吃冰淇淋来减肥)——当然,“伪创新”会声称那些废话式的拍脑袋已经是很复杂、很艰苦的思考了!
但是,简单的思考真的解决不了复杂的问题。妄图用简陋的思维(当然,当事人已经自我感觉很复杂了)去解决复杂的问题,有用才怪了!
不排除有人说“我就是用这么简单的思维就把项目做成了”。并存≠因果。能把项目做成的原因是隐去不说的填坑和加班,不是简单思维。
事物的复杂性不会因为我们不理解而且懒得理解,它就不存在了。就像现代数学和物理知识,一般人看不懂,但不能因为看不懂也懒得去学,干脆算了,自己发明一套"简单"的去解决问题。
(2)无领域
作者以为自己在说“领域驱动设计”,其实他说的是“企业应用架构模式”、“互联网系统架构模式”。
以某传播较广的DDD文章为例。领域类就一个Account,然后就开始讨论Entity、Service、Repository、DTO、六边形架构……不是说这个知识没用,问题是团队缺的是这个嘛?
我见过的很多开发团队,既没有能力理清复杂的领域逻辑(第一个D成了空话),实现时也没有能力维护领域逻辑(第二个D成了空话)。
而且,还逃避和麻醉自己——“我用了策略模式(你看,我够高大上吧),把***的逻辑放在***Strategy里了,所以问题解决了”。
部分幻灯片
……以下略去部分幻灯片……
……以下略去部分幻灯片……
……以下略去部分幻灯片……
……以下略去部分幻灯片……