V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hellojeana
V2EX  ›  问与答

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

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

    是不是应该把 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   ·   实用小工具   ·   1060 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:42 · PVG 06:42 · LAX 14:42 · JFK 17:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.