为什么要有分层?
软件开发的过程就是一个抽象、分层的过程,从二进制抽象出来汇编、汇编抽象出来各种高级语言,正是这种一层层的抽象,才有了现在这么好用的各种编程语言,使得开发人员在开发过程中不需要关心底层,可以快速的完成开发任务。
web开发中的分层应该怎么分?
众所周知,http协议是基于tcp协议的,一次http通信其实就是一个特殊的tcp通信,而作为一个web开发者,是没有必要关心tcp层是如何传输的,所以为了能够更高效的开发,web开发中的第一个抽象就是对tcp层进行封装,只暴露出来一个符合http协议的接口,这个分层在python中是wsgi,wsgi是一套协议(pep3333),它规定了对tcp层封装的开发者应该暴露出来的接口是什么样子的,web开发人员可以根据接口开发自己的web应用。这就是web开发的第一个分层。
通过第一个分层,web开发人员可以完全不需要关心tcp层,只根据wsgi协议就能开发出自己的web应用。可是你要是真的直接使用pep3333去做web开发,会发现也会异常繁琐,每次开发需要做很多相同的事情,包括url映射、自己构建request对象、自己构建response对象等等。这个时候就需要再抽象一层——web框架,包括flask、django、tornado等等,他们所做的事情就是在wsgi的基础上将一些通用的模块抽象出来,这样,web开发人员通过web框架开发的时候就只需要关心业务。
截止目前,web开发人员可以很方便的获取到客户端传输过来的符合http协议的数据,根据数据构造需要返回的html(mvc or mtv)或者json(前后端分离)。
下一节,我们将按照以上所述的经典分层模式对之前的代码进行重构。