面试时如何回答“你如何理解前后端分离”? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hellojeana
V2EX    问与答

面试时如何回答“你如何理解前后端分离”?

  •  
  •   hellojeana 2017-07-07 17:17:30 +08:00 2760 次点击
    这是一个创建于 3021 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是不是应该把 MVC 模式讲一遍( ̄ ̄) 总之,就是前后端工程师相互不需要依赖的意思咯?

    Morriaty
        1
    Morriaty  
       2017-07-07 17:44:35 +08:00
    前后端分离和 MVC 还是有点区别的吧,比如 django 的 render_template,VC 并不一定要解耦的。

    我理解的前后端分离就是解耦,比如用户组提供统一的用户 API,然后前端 web、app、小程序都可以调用这个 API,不用每个项目、每个产品都单独去查询用户数据库。
    libook
        2
    libook  
       2017-07-07 20:08:29 +08:00
    What:

    个人理解,这是分层解耦的一种思想,即“前端”开发的时候不需要考虑“后端”是如何实现的,“后端”开发的时候也不需要考虑前端如何设计。
    上文所谓的“前端”是指完全和视图层以及和用户交互相关的系统,“后端”通常是指完全和资源以及和资源相关的业务逻辑的系统;前者通常指的是客户端,后者通常指的是服务端。
    当然和整体架构规划是有关系的,有些大型网站会将客户端以及和视图层强相关的服务端统称为“前端层”。比如典型的 Front-End=>Front-Back-End=>Back-End 架构中,Front-End 和 Front-Back-End 统称为前端层。

    Why:

    分层解耦是计算机领域用来降低系统复杂度的两种基本方法,所以其实前后端分离是用来降低整体系统复杂度的,因为前后端完全分离,后端和视图层完全无关,所以后端具备相当强的通用性。理想情况下,一个系统的多个前端(如 WEB、Android、iOS )可以使用同一套 API 共用一套后端,后端只需要一套设计就可以。而且由于后端和视图层无关,所以后端可以很容易拆解进行服务化设计,以具备服务化的优势。对于前端来说,需要对 API 提供的资源以及对资源的操作进行封装抽象,以满足自己在 UI 上的特异性。

    How:

    后端提供资源以及资源相关的操作,这些是从产品上对资源的描述和设计决定的,有些资源可能是以数据模型的形式存在,另一些可能是以非数据模型的形式存在(如对第三方服务的抽象),后端提供的 API 也是更贴近于资源的设计,有一种设计风格是 REST,可以满足这种 API 设计需求。
    前端通常需要自成一套系统(比如前端本身就具备一整套 MVC 机制),使用 API 从后端获取资源,自己再进行抽象( Model ),然后对自己抽象的模型封装一些 UI 上面的展示和交互逻辑( Controller ),再通过前端路由、模板引擎之类的机制展示出来( View )。浏览器端常见的技术选型有 React、Vue、Angular 等。

    总结:

    前后端分离的思想可以用来在一定程度上降低整体系统的复杂度,但是由于是更高级的抽象思想,所以在性能上会差一些,在架构规划上按照实际的情况和需求判断是否要使用这种设计。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     985 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:39 PVG 06:39 LAX 15:39 JFK 18:39
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86