写点什么

趣解领域驱动设计 - 从地心说到日心说

作者:凡语
  • 2023-07-02
    上海
  • 本文字数:1895 字

    阅读完需:约 6 分钟

趣解领域驱动设计-从地心说到日心说

领域驱动设计理念这些年来蒸蒸日上,但是基本上都是基于软件开发术语的描述,难免有些初学者会困惑。

本文将以地心说到日心说的发展过程作为案例,以此说明领域驱动设计的实际应用过程。


话说秦始皇统一天下后,有很多术士为他服务。某一日,发生了“天狗食月“,秦始皇心中疑惑,心想以前是天下动荡不安,故天降警示,如今四海升平,怎么还发生呢?便问原因。术士当然只能说好话,惹皇帝不高兴可是直接掉脑袋的,但是皇帝仍然不放心。

经过收集历史数据,某个术士发现,“天狗食月”是隐约有规律的,就是发生的时间点,基本上是月盈的时候,但是哪次月盈会发生,却没有找到规律。于是他就写了一个程序,模拟月亮绕大地的旋转,并期待能找到更多的规律。后来又想会不会跟太阳有关系,所以又加上了太阳绕大地的旋转,日升日落。太阳有个比月亮复杂的地方,就是一年四季太阳的高度是不同的。这难不倒我们的天才术士,他很快就完成了程序的原型。

这个程序只有 200 行,其他术士看了他的演示,也都称赞有加,只是仍然没能解释“天狗食月”什么时候会发生。

这就是我们对天体的第一个模型,他包含地球、月亮和太阳,很大程度上符合我们实际的观测结果,换句话说就是基本满足当时的业务需求。

如下图所示,大地是方的,位于中心,月亮和太阳绕着大地运转。

但是这个模型也有缺陷,比如“天狗食月”还是没法解释。

转眼一千年过去了,那位天才术士的后代继承遗志,仍然在研究天象,并继续完善程序模型,比如加入了金木水火土五大行星。这期间他们也发现了更多的问题,比如,太阳有时候也会被天狗吃掉,行星有时会变暗。更奇怪的是,木星和土星有时候还会逆行。

业务需求变得更加复杂了,旧模型暴露出来的问题也越来越多。幸亏我们的新一代术士充分学习人类的先进研究成果,他从海外夷人那里听说了一个新的模型:本轮均轮模型。

该模型认为:

1,地球是圆的,位于宇宙的中心。

2,月亮和太阳绕着地球转。

3,行星比较复杂,每个行星都有自己的本轮,行星绕着本轮转,本轮又沿着均轮绕地球转。

如下是本轮均轮的模型图:

于是我们有了第二个模型,他可以解释为什么行星会变暗,也能解释为什么行星会逆行。

只是要写这个程序,可就不那么简单了,每个行星都有本轮,每个本轮都要配一个均轮,代码已经超过了 5000 行。

经过 3 个月的努力,程序终于完成了,基于新的模型设计的程序,跟观测结果更加接近了,换句话说对业务的支持明显进步了。

美中不足的是,邻居家小孩问了个问题,为什么夏天和冬天比较长,春天和秋天比较短呢?

经过深思熟虑,我们的天才术士后代提出了一个大胆的设想:地球并不是中心,而是偏离中心一段距离。

这样地球对太阳的距离就有了变化,所以四季长度也不一样了。而且行星的明暗变化也会更大,这样本轮就可以设计的小一些了。

这个就是我们的第三版模型,显然我们对太阳系的认识更加深入了,模型也能更好的符合业务需求。

这次改动也不大,经过一个月的努力,我们的新版程序就上线了,赢得了举国的称赞。

只是,天狗什么时候要吃月亮的问题,仍然没有解决。

不过没关系,基于子承父业的精神,天才术士的后代的后代们继续优化着程序。他们发现了土星带着光环,发现彗星会周期性的出现。前一个问题好办,只花了一天就改完了,对于彗星却很难解释,难道需要一个扁圆型的均轮?那这个均轮会不会撞到其他均轮?

就这样又过了一千年,这个程序已经超过了 50000 行。这也是没有办法的事情,为了满足实际情况,需要不断的基于观测结果进行一些调整,很多时候这个地方调整好了,却对另一个地方造成了破坏。程序越来越臃肿,每次一个很小的变化都可能导致大量的修改且 bug 层出不穷。

终于有一天,这位天才术士的后代中又出了一位空前绝后的天才,他从西洋人那里听说,太阳才是宇宙的中心,地球和其他行星都绕着太阳转。

于是我们的第四版模型诞生了。且由于该模型的巨大变化,我们不得不重新设计整个程序。

我们的新程序,不但只有 1000 行代码,而且还可以完美预测月食和日食,甚至预测五星连珠也不在话下。


在上述整个过程中,我们通过对领域知识的不断深入理解,使我们的程序能够不断完善对业务的支持,且最终通过重构优化了整个程序。


在实际工作中,我们应该一开始就和领域专家建立深入沟通机制,理解领域相关名词的内涵,理解业务流程和关注点,避免被表面现象所迷惑(比如认为太阳绕着地球转),这样才能减少初期踩坑的可能性,减少后期程序臃肿或大量重构的问题。


在实际场景中,只要业务在发展变化,我们对业务的认识也就会变化,所以模型的持续深化和代码的持续优化优化是长期的。比如上面的太阳系模型,有人指出,水星会发生进动。这个 bug,需要再过 500 年才能修复了。


发布于: 2023-07-02阅读数: 121
用户头像

凡语

关注

大道至简 2021-04-25 加入

资深码农,物理爱好者。

评论

发布
暂无评论
趣解领域驱动设计-从地心说到日心说_领域驱动设计_凡语_InfoQ写作社区