为什么我说“设计模式”的设计理念是误人子弟?

我相信很多人一看到这个标题,可能就要准备来喷我了,毕竟自己信奉了多年的东西,自己也花费了大量的时间和精力去学的一个东东,结果被我说成“误人子弟”,心理上和情感上都会很难接受 :)

但是先别急,看完我写的然后再认真思考一下再做决定也不迟。

首先,我要特别强调一下是设计模式的设计理念误人子弟,不是23个设计模式误人子弟,23个设计模式是非常有价值的,都是前辈们的经验总结,有很强的指导意义!

那么,设计模式的设计理念是什么呢?其实就在设计模式书中,第一章的1.6.7章节“设计应支持变化“,中文版原文是这么说的:

上面这个截图的内容就是设计模式所倡导的核心设计理念,一言以蔽之:预测变化!而且是要预测“生命周期内”的变化!

看起来很牛逼啊,预测变化,还要能够预测“生命周期内”的变化。

但是你认真想想就知道了,这怎么可能?

淘宝2004年开始写代码,到2021年已经17年了,这生命周期算17年吧,谁能够在2004年预计2021年?有这个预测能力,早就不写代码了,身价几万亿都有了。

Windows95是95年推出的吧,现在windows系统已经是win11了,生命周期是26年,微软的工程师在95年预测20多年的变化?!

所以,如果你真的在实践中按照“预测生命周期内的变化“,你会发现“一切皆有可能”!你所有的代码都要用上设计模式!

即便你真的吃饱了没事干,按照一切皆有可能的想法去用设计模式,你还是无法应对所有的变化的,现在流行的微服务、云原生,诞生不超过10年,那么10年前的人写代码,怎么预测这种技术趋势?

所以上世纪90年代出版的设计模式一书中提倡的这个设计理念是完全不符合技术发展趋势,也不符合业务发展趋势的

其实《重构》的作者在书中也阐述了类似的观点,书中2.6章节“重构与设计“特别谈到了到底是预测变化,还是通过重构来应对变化,具体如下:

《重构》书中提炼出了个“三次法则”:事不过三,三则重构

我把三次法则改为了更容易理解的“一写二抄三封装“的说法,也就是说:第一次直接写代码,第二次来了类似的需求,拷贝(或者继承等)第一次的代码修改;第三次还有类似的需求,那就重构,此时可以用上设计模式来重构。

事实上,无论是我个人的职业经历,还是各个系统(开源的和商业的)的演进趋势,无一例外的都在证明《重构》的设计理念是正确的,而设计模式的设计理念是错误的!

我们看一下《Apache SkyWalking创始人吴晟:开源如何国际化》这篇文章中,吴晟老板的看法:

所以我们应该做的是:学好23个设计模式,但是记得基于重构的设计理念去应用设计模式!不要一上来就各种神预测然后各种骚操作,这样不但没什么用,还是有很多危害!

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 结果为 "12345",因为该函数并不会对数字进行任何处理,它仅仅是将数字转换为字符串,并在其前面添加足够数量的零,以使其达到指定的位数。在这种情况下,数字"12345"本身已经有5位,而指定的位数为4位,因此函数不需要添加任何前导零。 ### 回答2: Js prefixinteger(12345,4)结果为12345。 Prefixinteger函数是一个自定义的函数,根据其名称可以猜测出它的作用是在一个整数前添加指定数量的前缀。在这个例子中,函数prefixinteger接受两个参数,第一个参数是整数12345,第二个参数是4。 根据函数的定义,我们可以知道该函数的逻辑是在给定的整数前添加指定数量的前缀。然而,在这个例子中,整数12345的位数为5位,而第二个参数4表示添加4位的前缀。但是,由于整数12345的位数已经超过了指定的前缀数量,因此不需要添加任何前缀。 所以,将整数12345作为第一个参数传入prefixinteger函数并指定前缀数量为4,结果就是返回原始的整数12345。 ### 回答3: 函数prefixinteger的作用是在一个整数前面补齐指定数量的零,使得整数的位数达到指定的位数。对于函数调用prefixinteger(12345,4),结果为"12345"。 原因如下: 1. 在函数调用中,传入的第一个参数是整数12345,第二个参数是4,表示在整数前面补齐4个零。 2. 由于整数12345的位数为5,不足4位,所以函数不会进行任何操作,直接返回原来的整数"12345"。 3. 所以最终的结果为"12345"。 需要注意的是,函数的名称可能存在拼写错误或者未定义的情况,根据函数的具体实现来确定函数的功能和结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值