购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5 前端与后端

通常划分不同服务的方法是人们常说的“前端”(frontend)和“后端”(backend),用以描述软件的层次,其中靠近最终用户的这一层是前端,后面那层是后端。

传统意义上的前端是负责表现层的这一层,在用户这边,而后端则是数据访问层,服务于业务逻辑。在C/S(Client-Server,客户端-服务器)架构中,客户端是前端,服务器是后端,如图2-4所示。

图2-4 客户端-服务器架构

随着软件系统的架构变得越来越复杂,这些术语也变得容易产生歧义,其理解通常要取决于上下文。前端几乎总是被直接理解为用户界面,而后端则可对应于多个层次,它指的是为所讨论的那些系统提供支持服务的下一个层次。例如,在云计算应用中,Web应用可使用MySQL这样的数据库作为存储后端,或者使用Redis这样的内存存储作为缓存后端。

通常前端和后端的实现方法是完全不同的。

前端关注的焦点是用户体验,所以最重要的问题是可用性、令人愉悦的设计、响应能力等。针对这些问题,很多时候需要对“最终外观”以及如何让操作更加易用等有独到的见解。前端代码在最终用户那里执行,所以对不同类型终端硬件的兼容性很重要。同时,前端的业务负载分散于各用户终端,所以从用户界面的角度来看,其运行性能是最重要的。

后端则更注重于稳定性。在这里,硬件受到严格的控制,但负载并不分散,因而通过控制所使用的资源总量来优化后端系统的性能显得尤为重要。调整后端功能是比较容易的,因为只需修改一次,对所有的用户都会同时生效。但这也意味着风险更大,因为相关的问题会影响到所有用户。这样的需求环境更加注重扎实的工程实践和故障的可重现性。

全栈工程师这个词通常用来形容那些能自如地从事多种类型工作的人。虽然这种情况在某些领域是可行的,但事实上很难找到一个完全适合或愿意长期从事多种工作的人。

大部分工程师会自然而然地倾向于只做特定类型的工作任务,而且大多数公司都会安排不同的团队来从事各领域的工作。从某种程度上说,每类工作任务的特点都是不一样的,前端工作更注重的是设计的格调,而后端用户则更在意达成系统的稳定性和可靠性。

一般来说,用于前端的常用技术包括以下这些:

❍HTML和相关技术,如CSS。

❍用于增加互动性的JavaScript和库或框架,如jQuery或React。

❍设计工具。

由于操作和控制更直接,后端技术更加多样化,例如:

❍多种编程语言,可以是脚本语言,如Python、PHP、Ruby甚至是使用Node.js的JavaScript,或者是编译型语言,如Java或C#。它们甚至可以进行混合编程,用不同的语言实现不同的组件。

❍数据库,可以是关系数据库,如MySQL或PostgreSQL,或非关系数据库,如MongoDB、Riak或Cassandra。

❍Web服务器,如Nginx或Apache。

❍可扩展性和高可用性工具,如负载均衡器。

❍基础设施和云技术,如AWS服务。

❍容器相关技术,如Docker或Kubernetes。

前端可以利用后端定义的接口,以用户友好的界面呈现其操作。同一后端可以有多个前端,典型的例子是,针对不同平台的多个智能手机接口,可以使用相同的API与后端进行通信。

请记住,前端和后端只是概念上的划分,并不一定需要将不同的流程或存储库按照前端、后端进行区分。常见的前端和后端共存的情况是Web框架,如Ruby on Rails或Django,在这样的环境里,可以同时定义前端HTML接口,以及处理数据访问和业务逻辑的后端控制器。这些案例中,HTML代码直接由执行数据访问的同一进程提供。这个过程中使用MVC(Model View Controller,模型-视图-控制器)架构来进行逻辑划分。

MVC架构

MVC(模型-视图-控制器)是一种将程序的逻辑划分为三个不同组件的设计模式。

MVC模式很早就在图形用户界面的设计中得以使用,并且从20世纪80年代首个完整的图形交互界面系统开始,就一直应用于该领域。到了90年代,MVC开始作为处理Web应用的一种方式被引入。

❍这种架构确实非常成功,因为它实现了清晰的概念分离。

❍Model(模型)用于管理数据。

❍Controller(控制器)接收用户的输入并将其转化为对模型的操作。

❍View(视图)用于呈现用户想要了解的信息。

从本质上讲,模型是系统的核心,因为它完成的是数据处理相关操作。控制器反映用户的输入,而视图则描绘操作的输出。MVC模式如图2-5所示。

图2-5 MVC模式

MVC架构可以在不同的层面上来考量,也可以将其看作是分成不同层级的。如果几个元素间有交互,它们也可以有自己的MVC架构,系统的模型部分也能与提供信息的后端进行对话。

MVC模式可以用不同的方式来实现。例如,Django声称它是一个模型视图模板,因为控制器更像是框架本身。然而,这些都是次要的细节问题,与总体设计并不矛盾。

模型可以说是MVC架构三个组成部分中最重要的元素,因为它是其核心内容。模型包含数据访问,同时也包含业务逻辑。完善的模型组件可以抽象的方式将应用程序的逻辑从数据输入和信息输出的操作中分离出来。

通常情况下,控制器之间的某些界限会有点模糊。各种输入信息可能在控制器中进行处理,并发起对模型的不同调用。同时,输出信息也可在控制器中进行调整,然后再传递给视图。虽然强制执行明确、严格的界限总是很困难的,但好的做法是,牢记每个组件的主要目标是什么,以便提供清晰的思路。 PQXxEd5KJt12p+v246jiAl9968M/Z9thp/JKn3Sbo0F9JP2iYmK8Yn91Y2/Iqmuy

点击中间区域
呼出菜单
上一章
目录
下一章
×