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

2017-07-07 17:17:30 +08:00
 hellojeana

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

2470 次点击
所在节点    问与答
2 条回复
Morriaty
2017-07-07 17:44:35 +08:00
前后端分离和 MVC 还是有点区别的吧,比如 django 的 render_template,VC 并不一定要解耦的。

我理解的前后端分离就是解耦,比如用户组提供统一的用户 API,然后前端 web、app、小程序都可以调用这个 API,不用每个项目、每个产品都单独去查询用户数据库。
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 等。

总结:

前后端分离的思想可以用来在一定程度上降低整体系统的复杂度,但是由于是更高级的抽象思想,所以在性能上会差一些,在架构规划上按照实际的情况和需求判断是否要使用这种设计。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373779

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX