这些年,我在给开发团队讲授分析和设计技能时,常会有学员质疑:老师,你讲的类、状态机,这些都太难太细了,我最想要了解的是如何拆分系统,能不能给一个简单明了的方法?
有的同学在开始咨询时甚至发过来一个DDD圈子人士的课纲,你看,人家说了怎么拆分系统,咱这边有嘛?
还有的同学受DDD圈子毒害太深,甚至和我“探讨”:如果把大的系统拆分成很小很小的小块,小到不用分析,这不就不用UML了吗,而且还可以多个团队并行开发!
**********
首先说我的观点
(1)(以真正获得收益为目的)分解系统是一件非常非常复杂的事情
(2)DDD圈子的各种“简单易行”的方法等同于瞎蒙
(3)稍微靠谱一点的分解依据可能是状态机,但这需要全面的建模技能
(4)警惕“大道至简”的骗子话术
一、(以真正获得收益为目的)分解系统是一件非常非常复杂的事情
【如果把大的系统拆分成很小很小的小块,小到不用分析,这不就不用UML了吗,而且还可以多个团队并行开发!】
啊,这可太妙了——怎么做呢?
其实类似的话,很多年前有一位计算机科学的博士说过。在《软件方法》第1章中,我谈到了这个问题:
★《软件方法》第1章:口号、方法、染色,https://mp.weixin.qq.com/s/Dr9t4Py1jHS62IBwYx_TJw
我也来模拟一下:
怎样将大象放进冰箱?分三步:(1)打开冰箱门(2)放入大象(3)关上冰箱门
怎样拥有一个亿存款?分三步:(1)赚一个亿(2)选一家银行(3)把钱存起来。
怎样才能本周末中奖双色球?分三步:(1)挑出本周末的中奖号码(2)去往彩票店(这得亲自买,可别委托别人!)(3)按号码买彩票。
怎样敏捷制造10纳米光刻机?分三步:(1)把光刻机拆解成10万个零件(2)发动1000万人组成10万个团队并发造零件(3)把零件组装起来
DDD圈子这样的话术可笑吗,可笑,但他们就是靠这个话术来筛选出“目标客户”——很多人喊着“受用”呢!
这方面,我在《软件方法》中已有揭露:
★《软件方法》1.5 警惕和揭秘伪创新,https://mp.weixin.qq.com/s/RSYrDZp1_dsr5beRmDUo_w
花絮:还真有DDD圈子的文章正儿八经地把这个当成“大问题拆成小问题”的例子,而不是调剂的笑料:
二、DDD圈子的各种“简单易行”的方法等同于瞎蒙
如果只是为了分解而分解,那可太容易了,100个人有100个做法。如果要真的获得收益,而不是像“《软件方法》1.5 警惕和揭秘伪创新,https://mp.weixin.qq.com/s/RSYrDZp1_dsr5beRmDUo_w”里面说的一样骗人骗己,就变得非常困难了。
要真有这个秘诀,放在什么时候都是大杀器,难道之前的复杂系统不需要分解吗?像Dijkstra那样得个图灵奖妥妥的。根本不用等到现在,拿“微服务”(这也是一个造词)之类的作为理由。
我在《你的医书是假的》一文中说过,微服务经常被DDD圈子用来作为遮掩自己能力不足的遮羞布。
★你的医书是假的,https://mp.weixin.qq.com/s/PbzMuEXhf1iuAWF5n4ezTQ
以见过的DDD圈子产出来看,所举的例子,类不超过5个,有时甚至是1-2个。连精确定义领域逻辑的能力都没有,就敢教别人怎样“切分系统”?
★《软件方法》强化自测题-总纲(3)(https://mp.weixin.qq.com/s/6kct6Z9EQ6vzSNx7Qzry5Q):
**********
如果一个人去看医生,被怀疑有恶性肿瘤,从这一刻开始的过程是很麻烦和痛苦的:
先对重点部位做影像;
医生看过影像后,认为可能性较大,安排活检,即从该部位切下一小块肉,送去做病理;
病理报告确认恶性肿瘤后,可能还需要做全身的PET/CT,观察其他部位是否有病灶;
对重点部位做进一步的影像和检查,各种抽血检验更是家常便饭;
前期化疗;
外科手术或放疗去除重点部位的病灶;
继续N个疗程的化疗和靶向药治疗,期间反复做影像和检查;
初步治疗结束,出院;
定期做免疫治疗,并影像和验血复查;
一旦有事,又回去住院重复之前的过程。
这一套下来,患者的生存时间会多几年。
嫌麻烦?医院门口有很多神医摆摊,家里七大姑八大姨也有民间偏方!
**********
目前DDD圈子“切分系统”的手段可能有这么几种,见下图:
只要抛开系统内部的复杂性不谈,把焦点左移,方法就变得和“神医”、“七大姑八大姨”一样简单易行了。
★你的医书是假的,https://mp.weixin.qq.com/s/PbzMuEXhf1iuAWF5n4ezTQ
注意:
伪创新往往并不会直接说自己简单易行,而是会说自己很高深。宣传中往往带有“艺术”、“禅”、“道”等字眼,有意无意地朝宗教、艺术、玄学方向引导——比起枯燥的数学理论和逻辑推理,这些东西可是太好下嘴了。
开发人员一开始以为很难很深奥,上手一学,发现其实不难!可以说是:投资少,见效快,产量高,门槛低,而且仪式感十足。最妙的是,不用走出舒适区辛苦学习,就得到了“方法学”,这可太对胃口了!开发人员立刻有捡到了便宜的感觉,心中豪气顿生——不愧是我!别整三岁的,有能耐你整四岁的!
另外,伪创新还会声明“领域驱动设计不是银弹”之类,也是为了进一步塑造形象。我都诚实地说了我不是满分,所以我前面塑造的90分的形象应该是真的。
我就不贴图了,读者感兴趣可以自行搜索,关键词:领域驱动设计、不是银弹、道、艺术……。
三、稍微靠谱一点的分解依据可能是状态机,但这需要全面的建模技能
待续……