一个合格的后端必须会点前端

一个合格的后端必须会点前端

作为一名做过全栈和纯后端开发的程序员来说,当今AI时代前后端职责越来越糊,很多公司甚至裁掉前端,只留后端,这就要求我们必须会点前端,增加核心竞争力,以面对AI时代日渐严峻的就业形势。

具体原因,我总结了以下几点:

AI冲击
纯切页面、调接口画表单/列表的前端,被替代最快;前端在转全栈,后端也在转全栈。AI 能帮你生成页面,但你看不懂就改不动、也验收不了。岗位墙变矮了,很多JD(岗位介绍)要的就是能闭环交付的人。

中小公司
管理后台、内部工具经常没有专职前端或者已经裁掉前端,需要后端顶上。

个人OPC
一人公司更没得选:没有前后端分工,必须会全栈,才能自己把MVP(最小可行产品)做出来、尽快验证需求是否真实存在。

联调效率
前端说字段不对、分页对不上、结构不好用——你若完全不懂页面怎么消费数据,来回扯皮,半天耗在沟通上。出BUG也分不清是接口问题还是渲染问题。

成本
多招一个前端,或者为一点页面改动排期等联调,都是真金白银。后端会一点,很多需求自己就能收尾,人效直接上去。

会点前端,不是让我们去卷动画,而是:能看懂、能改、能自己顶一版简单页面,接口设计时也知道调用方要啥,也能清楚前端处理逻辑,不至于什么都留到后端处理(很多前端啥都想后端返回,一问就是前端做不了)。

先分清:和传统 MVC 不一样

MVC 是后端返回模型,.cshtml 用 @ 语法解析数据再输出 HTML,属于服务端渲染(SSR);现在主流是SPA(单页面应用)——后端返回JSON,页面由前端组件渲染,一个页面会打多个接口。

你不再 return View(model),而是 return Results.Ok(dto);页面不是 .cshtml,而是 .vue / .tsx

总所周知,前端有三大框架

  • Vue:上手快,模板接近HTML,国内岗位更多,中后台很常见,双向绑定语法糖写起来爽飞
  • React:JSX写UI,生态无敌,全球用户和开源项目最多,但是单向数据流setXXX个人认为不好用
  • Angular:后端设计哲学,我也试了试,整体偏重,学习曲线陡峭

我是熟悉Vue和React,这里来看下两者是如何处理数据的:

Vue核心:ref 存数据,双向绑定,改数据视图自动更新;常用 v-for / v-model 绑列表和表单。

<script setup>
import { ref, onMounted } from 'vue'

const list = ref([])
const keyword = ref('')

async function load() {
  const res = await fetch('/api/products?kw=' + keyword.value)
  list.value = await res.json()   // 赋值用 .value
}

onMounted(load)
</script>

<template>
  <input v-model="keyword" @keyup.enter="load" />
  <ul>
    <li v-for="item in list" :key="item.id">
      {{ item.name }} - {{ item.price }}
    </li>
  </ul>
</template>

记住:list.value = xxx 改数据;模板里直接写 list,不用 .value

React核心:useState 存数据,单向数据流,必须setXxx 更新;请求放 useEffect(需要依赖项,更新副作用)

import { useState, useEffect } from 'react'

export default function ProductList() {
  const [list, setList] = useState([])
  const [keyword, setKeyword] = useState('')

  async function load() {
    const res = await fetch('/api/products?kw=' + keyword)
    setList(await res.json())   // 用 setter 更新,直接改list不生效
  }

  useEffect(() => { load() }, [])

  return (
    <>
      <input value={keyword} onChange={e => setKeyword(e.target.value)}
             onKeyDown={e => e.key === 'Enter' && load()} />
      <ul>
        {list.map(item => (
          <li key={item.id}>{item.name} - {item.price}</li>
        ))}
      </ul>
    </>
  )
}

Vue 偏模板声明,React 偏 JS 里写 UI;本质都是:状态变 → 视图更新 → 再调你的 .NET 接口同步

思考

前后端分离还在,但边界没那么硬了。全栈不一定更轻松,薪资待遇可能不变或更低,而且往往更累,但很多岗位的真实需要会点前端,这样才能扩大找工作的范围。

 

分享到: 文章二维码
© 版权声明

暂无评论

您必须登录才能参与评论!
暂无评论...