1.DDD,是技术也是艺术
软件开发作为一门“技术”比较好理解,那么怎么理解其中的“艺术”呢?咱们就说三个方面吧:权衡的艺术、抽象的艺术、抓住本质的艺术。
2.权衡的艺术
同样的业务,可以有不同的模型;同样的模型,可以用不同的代码风格实现;同样的技术需求,可以用不同的策略。
软件开发的全过程,几乎每一步,都可以有不同的做法,每种做法都有各自的优劣,常常没有绝对的对错。
怎样才能更清晰地审视自己的决策呢?最好能够把开发过程中每个架构决策的理由都记录下来,以便进一步地优化和演进。一个可以落地的方法是架构决策记录(architectural decision record ),简称 ADR。
3.抽象的艺术
软件开发是个建模过程,而建模过程又是一个抽象过程。没有经过抽象的原始需求只是“形似”,经过抽象的领域模型才能“神似”。这也就是我们要建领域模型的一个重要原因。
4.抓住本质的艺术
软件开发本质问题,来源于大家耳熟能详的“没有银弹”理论。 即,没有任何一种单一的软件开发技术,能在短期内大幅度提高软件开发效率。
Brooks 把软件开发所面临的困难分为本质问题(essence)和非本质问题 (accident)。 Brooks 认为,软件开发工具的革新,硬件效率的提升,解决的都是软件开发的非本质问题。而由于无法解决本质问题,所以工具的发展对软件开发效率的影响只是渐进的。
什么是软件开发的本质问题呢?这包括业务的复杂性、业务的可变性、以及软件的不透明性。
DDD,解决的恰恰是软件开发的本质问题。通过可视化、抽象化、严格化的方法建立领域模型的艺术,仍然无法被人工智能取代。
5.思考:低代码和ChatGPT会让程序员失业吗?
从某个角度来说,软件开发的历史,就是代码越来越“低”的历史。C 语言比汇编语言“低”;Java 比 C 语言“低”,现在的“低代码”不过是这个过程的延续。而 ChatGPT 写程序,是从另一个层面,使软件开发的难度更低。
没有失业的程序员有两种,一种是不断拥抱新技能的;另一种是学会解决软件开发本质问题的。
低代码,人工智能编程,目前解决的仍然是软件开发的非本质问题。为什么它们还不能解决本质问题呢?其中一个原因,就是问题中的“艺术”成分。
此文章为3月Day7学习笔记,内容来源于极客时间《手把手教你落地 DDD》