雪の下春希
2K posts

雪の下春希
@sweetliquidtw
| Fullstack (FE: 50%, BE 50%, Game Dev: 0%) | ❤ 二次元 | 间歇性抑郁 | 贫困人口 | 从事特殊性职业,建设标志性建筑 | 不戴耳机会变成 ADHD | Ignore my following please | 可以叫我子晴/春希


最近公司 领导 和我聊起面 向对象(OOP)和设计模式。并说想要在公司中推广设计模式。但是我表示了 反对。 我想聊聊我为什么不喜欢设计模式,以及我信奉的软件 “设计模式”。 说实在的,我其实没看过 GoF 那本设计模式的书。以后也大概不会去读。但是设计模式的大名还是有听过 我之前在 Vue 团队写 Vapor 模式时。发现 Vue 的响应式系统确实使用了 OOP,但主要是出于性能上的考虑。当优化达到一定层级之后,哪怕是引擎层面的微小实现差异也会影响性能。所以我们选择 OOP,是因为它带来的优化便利,并不是因为我们想要套用某种具体的设计模式。 * Vue 的源代码中 ReactiveEffect、Dep、ComputedRefImpl 这些类的存在,是因为 V8 的 hidden class / inline cache 对固定形状的对象优化更好。 (如果理解有误,欢迎指出) 我在入行的初期学过 OOP,大约是 8 年前的事了,已经很久了。但是过去这几年,我逐渐觉得设计模式并不太适合 Vue 3 + TypeScript 的开发。如果不是为了性能优化,我现在也很少使用面向对象。我会这样看,一部分原因是受到了像 Anthony Fu (antfu) 这些人的影响。 * GoF 是 1994 年的 C++/Java 世界的产物。如今语言进化了,很多模式从"需要刻意设计"退化成了"语言原生特性"。 这就是为什么 antfu、Evan、Anthony Fu 那一派人不太谈 GoF。不是反对它,而是它已经融进语言里了,再单独命名反而显得笨重。 “ 模式之所以叫模式,是因为语言没原生支持它,你得手动重复实现。” 去年我读了一本关于如何更好的编程的书,我很快就爱上了它。我试着推荐给我的推友们,结果发现推友中已经有不少人读过了。而且也很喜欢! 这本书是《软件设计的哲学》(A Philosophy of Software Design) 我特别喜欢书中对复杂度的阐释方式,现在仍会时常翻阅。 我的 CLAUDE.md 提示词里也用了这本书的概念: - 深模块(Design Deep Modules) - 消除错误(Define Errors Out of Existence) - 向下沉淀复杂性(Pull Complexity Downwards) - 不同层不同抽象(Different Layer, Different Abstraction) 这边篇幅有限,就不展开这几个概念了。如果感兴趣的话,我可以之后仔细写写我自己的理解。 让我疑惑的问题: 设计模式如今还被使用,似乎更多是一种沟通时的共同语言。但是我们是否真的按照它的模式来设计代码架构呢? 它作为大家交流的语言和思想的工具如今是否还是合适的选择。是否落后,又是否有着与时俱进的新选择呢? * 写了好多,以上都是我自己的主观想法,可以随便聊 🤗


























