jQuery时代
故事要从学生时代说起。那时候上Web开发课,第一次接触网页制作,还是jQuery的黄金年代。HTML、CSS、JavaScript各一个文件,靠class把它们串起来。我不喜欢这种方式。
说白了,太麻烦了。
老师讲"关注点分离"的好处,我想不出什么有力的反驳,只好闭嘴。但心里完全没被说服。结构、样式、行为分开写,道理我懂。可是改一个按钮的样式,要在三个文件之间跳来跳去,这真的是"正确的设计"吗?我不这么认为。
遇见Vue.js
工作第二年,开始正式做前端开发。用的是Vue.js(v2)。
我觉得太棒了。不是说什么响应式、虚拟DOM之类的特性,而是HTML、CSS、JavaScript写在一个文件里这件事本身,就让我很舒服。
果然根本不需要分成三个文件嘛。
Scoped CSS我也很喜欢。那种层层嵌套、从根本上就无法维护的(至少我是这么坚信的)全局CSS,终于可以告别了。
转向React
这么好的Vue,在全球市场份额居然不是第一。我很快就知道了这件事。
因为有React。
JSX、刚出的Function Component、Hooks这些新东西让我有点发怵,但还是抱着"看看到底怎么样"的心态开始学了。
真的很棒。前所未有的一体感。
Hooks的调用顺序不能变这个设计,让我惊讶得不行——"这种设计也行?"但是把组件写得小而精,然后到处复用,这种美感让我很感动。CSS-in-JS好像反对的人也不少,但我个人很喜欢。
归根结底,我就是想让一个组件的所有东西都在一个文件里。
Redux这朵乌云
风向变了,是因为Redux。
长得离谱、看不懂的样板代码,还有各种现在已经记不太清的限制,搞得我焦头烂额。我心想,这不是我想要的开发体验。
但当时Redux是主流。走到哪儿都是"我们用Redux"。从那时起,我又开始讨厌前端开发了。找工作的时候开始躲着前端,优先选后端,就是从这时候开始的。
痛苦减轻了,但是
useContext出来之后,痛苦稍微减轻了一些。Redux一家独大的时代要结束了。
但我还是喜欢不起来前端。
样板代码是在变少。问题不在这儿。数据和逻辑跟组件混在一起,明明组件应该只是用来展示的View层。这让我很难受。
当然,大部分页面就是把后端返回的数据渲染出来,没什么大问题。但正因为如此,等到要在这个基础上做复杂功能的时候,就很容易直接在组件里写数据管理和业务逻辑。
Tailwind CSS这道光
Tailwind CSS出来的时候,我很激动。
CSS、Sass、PostCSS、Vue Scoped CSS、CSS-in-JS,一路走来,终于等到"正解"了。class容易写得很长,这个缺点确实存在。但跟CSS终于变得可维护这个优点比起来,根本不算事儿。
我还是在躲着前端
直到现在,我还是倾向于回避前端的工作。
原因很简单:坑太多了。
有没有用Redux?CSS方案是不是Tailwind以外的?复杂功能里逻辑和视图有没有耦合在一起?是不是处于永远的过渡期,什么都混在一起?这些很多时候要进了项目才知道。更重要的是,我这个人对这类问题特别敏感,会感到很痛苦。
当然,有问题就改呗。但关键人物不一定认同我的想法,也不一定能挤出时间来重构。
相比之下,后端的环境还算太平。
分层架构搞过头的、到处写原生SQL的、DDD派的、自研框架派的,坑也不是没有。顺便说一下,DDD这本书,前半部分讲领域建模的思想我是认同的,后半部分讲技术实现模式的我不太认同。
但后端的坑比较容易提前发现。前端的坑要细细确认才能看出来,后端相对容易把握。再加上我主要写Rails,本身就不太容易踩坑。
所以说实话,加入一个以前端为主的团队,我一直没有这个勇气。要做的话,至少得是能同时碰后端的全栈环境才行。这就是我这些年的真实想法。
不过,AI时代或许会改变这一切。