谈一谈设计范式
“四人组”(Gang of Four,GoF)在1995年出版了《设计模式:可复用面向对象软件的基础》一书,该书首次系统的介绍了23种设计模式,这些模式被认为是面向对象设计的经典,它与罗伯特·马丁的《敏捷软件开发──原则、模式与实践》一起被称为“软工双雄”。设计模式对软件开发的影响是极为重大的,现如今优秀的软件中都可以找到它们的影子,比如:Java开发者常用的Spring框架中,就使用了多种设计模式,使用这些模式的目的是为了框架获得优秀的扩展能力,Spring使用了大量的设计模式,而它也以优秀的扩展性而闻名。
对于Spring框架的开发者而言,Java语言是一种编程模型,而如何使用Java去构建Spring框架就是一种设计范式。回过头来,想一下自己平日所做的工作,以及花费精力所取得的成果,其中有哪些是依赖技术特性的?又有哪些是(有创新性的)使用这些技术的策略和方法?答案应该是后者,这是一种软实力,也就是你在这个领域积累的设计范式。再举个例子,比如Java的模块化技术JPMS,如何通过关键字定义模块是一种编程模型,而如何更好的使用模块去构建系统,以及面对问题该拆分出哪些模块,使得系统获得非模块化系统所不具备的优势,这些就是设计范式。市面上关于编程模型这些形而上的东西很多,而只可意会不可言传的设计范式却很少讨论。
OSGi不是不好,搞不下去的原因就在于其设计范式没有深入人心。EJB不是没有价值,很多开发人员缺少有效使用这项技术的设计能力,没有设计范式支撑的它也注定被丢弃。我们可以通过技术文档和书籍来学习技术,但是该怎么提升技术范式呢?答案是没有现成的知识让你直接掌握技术范式,这个活儿需要你自己来。
在工作和学习中,对于技术的使用过程中,除了使用它解决问题,还要刻意的思考:这么用对吗?有没有更好的使用方式?它还能解决了哪些问题?在构建解决方案的同时,也就是在完善自己的技术范式。
任何技术产品都是以产品(或者运行时)形态来展示其强大的特性,比如:WebLogic Server应用服务器,就算是OpenAI的chatGPT也是一样,这些产品能够带来革命性的价值,而要获得这价值,就需要依赖技术以及掌握这些技术的人,如下图所示:

如上图所示,可以更加体会到设计范式的重要性。任何重要的产品都离不开技术的革命,而它们交付给大众的形式都是产品,就像iPhone一样,其革命性来自于AppStore,在AppStore后面,是数以百万计的开发者。可以看到革命性的产品在通过向用户提供价值的同时,也需要构建一个吸引开发者的生态环境。
在这个生态环境中,有面向编程模型的SDK,也有如何高效使用编程模型的设计范式。在任何技术生态中,设计范式都是至关重要的,它需要足够的简单明了,使得开发者能够实现迁移。当开发者进入这个领域,一些他们所熟悉的设计范式能够与新环境中的范式所兼容,他们就会喜欢这里,从而诞生伟大的作品,同样,掌握更多的设计范式会让你在面对任何工作时都会显得游刃有余。
注重积累设计范式,做好分类整理,时常做好复习。