2025 年初:深入钻研 Vue,同时维护已有的 Laravel 项目
两种不同的技术路径,同步并行数月
2025 年初过得比我预想的更快。数个月里,两条线并行前进:一方面,我试图真正从底层理解 Vue.js,而不仅仅是会用它——与此同时,我还需要维护一个基于 Laravel 的系统,这个系统在我加入之前就已经在运行了。
两者以不同的方式,教会了我不同的东西。
Vue.js:从会用到理解其工作机制
我在 2025 年之前就开始使用 Vue 了,但那时候更多是处于“能用就行”的模式。遇到不清楚的地方,就去找个解决方案、应用上、然后继续。对于代码背后真正发生的事情的理解——这一块我一直是忽略的。
今年年初,我决定不再这样了。我从响应式开始:了解 ref 和 reactive 实际是如何工作的,而不只是什么时候该用哪一个。在阅读了更底层级别的解释之后——包括 Vue 如何在内部追踪依赖——许多之前感觉像是“魔法”的事情开始变得有道理了。也包括为什么响应式有时并不按预期工作。
watch 和 watchEffect 是我之前一直在用、但没有真正理解其区别的另外两个东西。深入学习之后发现,它们的区别是根本性的——不仅仅是语法上的区别,而是关于何时以及如何追踪依赖的问题。理解这一点改变了我编写响应式代码的方式。
Pinia 也是我在这个阶段重新学习的。在长时间使用 Vuex 之后,转到 Pinia 感觉像终于有了呼吸空间——不再有那些仪式感般的样板代码,之前感觉像是一项独立任务的状态管理变得自然多了。
Laravel:维护并非我写的代码
我维护的这个 Laravel 项目并不是我从零开始构建的。它已经存在了好几年,编码风格与我现在的习惯不同——有些部分仍在使用旧版本 Laravel 的模式,有一些本可以被更富表达力的 Eloquent 替代的原始 SQL 查询,以及散落在 Controller 中、没有清晰分离的业务逻辑。
这类项目中最大的挑战不是写新功能。挑战在于在不破坏其他东西的前提下修复问题——在一个测试覆盖率不足、也没有可靠文档的项目中。
我在那几个月里做的工作是渐进式的:将重复的业务逻辑迁移到 Service 层,在那些对别人(包括六个月后的我自己)来说难以理解的地方添加类型提示和注释,并逐步在安全可改的地方将一些原始查询替换为 Eloquent。
不是什么大改造。但每一处持续的小改动,都让代码库越来越接近一个可以轻松维护的状态。
每天都在切换上下文
同时进行这两件事有一个有趣的副作用:每天都在不断切换不同的思维方式。
在 Vue 这边,我的思维总是围绕着状态以及视图如何响应状态的变化。在 Laravel 那边,我的思维更偏向请求生命周期——数据进入、处理、输出。这是两种不同的心智模型,每天在它们之间切换好几次,一开始确实很累人。
但久而久之,出现了一个我未曾预料到的好处:在前端工作时,我更能意识到后端的合理限制和需求;在后端工作时,我更清楚什么样的数据结构对前端来说最容易消费。两者互相提供上下文。
2025 年初并不轻松,但结果是值得的。我在两个领域的技术理解都以一种扎实的方式得到了成长——不是因为学习了新东西,而是因为我终于正确理解了那些我一直以为自己已经懂了的东西。
展望未来,我想探索 Inertia.js 作为 Vue 和 Laravel 之间的桥梁。如果有人尝试过,我很想听听你们的经验。
