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