欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

goweb-如何设计一个Web框架

程序员文章站 2022-06-16 20:55:30
如何设计一个Web框架 前面十二章介绍了如何通过Go来开发Web应用,介绍了很多基础知识、开发工具和开发技巧,那么我们这一章通过这些知识来实现一个简易的Web框架。通过Go语言来实现一个完整的框架设计,这框架中主要内容有第一小节介绍的Web框架的结构规划,例如采用MVC模式来进行开发,程序的执行流程 ......

如何设计一个web框架

前面十二章介绍了如何通过go来开发web应用,介绍了很多基础知识、开发工具和开发技巧,那么我们这一章通过这些知识来实现一个简易的web框架。通过go语言来实现一个完整的框架设计,这框架中主要内容有第一小节介绍的web框架的结构规划,例如采用mvc模式来进行开发,程序的执行流程设计等内容;第二小节介绍框架的第一个功能:路由,如何让访问的url映射到相应的处理逻辑;第三小节介绍处理逻辑,如何设计一个公共的controller,对象继承之后处理函数中如何处理response和request;第四小节介绍框架的一些辅助功能,例如日志处理、配置信息等;第五小节介绍如何基于web框架实现一个博客,包括博文的发表、修改、删除、显示列表等操作。

通过这么一个完整的项目例子,我期望能够让读者了解如何开发web应用,如何搭建自己的目录结构,如何实现路由,如何实现mvc模式等各方面的开发内容。在框架盛行的今天,mvc也不再是神话。经常听到很多程序员讨论哪个框架好,哪个框架不好, 其实框架只是工具,没有好与不好,只有适合与不适合,适合自己的就是最好的,所以教会大家自己动手写框架,那么不同的需求都可以用自己的思路去实现。

我觉得这一章像是在将一个项目,认真学习项目,摘录就少一点····

一个基础的目录接结构

|——main.go         入口文件
|——conf            配置文件和处理模块
|——controllers     控制器入口
|——models          数据库处理模块
|——utils           辅助函数库
|——static          静态文件目录
|——views           视图库

beego框架路由实现

目前几乎所有的web应用路由实现都是基于http默认的路由器,但是go自带的路由器有几个限制:

不支持参数设定,例如/user/:uid 这种泛类型匹配
无法很好的支持rest模式,无法限制访问的方法,例如上面的例子中,用户访问/foo,可以用get、post、delete、head等方式访问
一般网站的路由规则太多了,编写繁琐。我前面自己开发了一个api应用,路由规则有三十几条,这种路由多了之后其实可以进一步简化,通过struct的方法进行一种简化
beego框架的路由器基于上面的几点限制考虑设计了一种rest方式的路由实现,路由设计也是基于上面go默认设计的两点来考虑:存储路由和转发路由

存储路由

针对前面所说的限制点,我们首先要解决参数支持就需要用到正则,第二和第三点我们通过一种变通的方法来解决,rest的方法对应到struct的方法中去,然后路由到struct而不是函数,这样在转发路由的时候就可以根据method来执行不同的方法。

controller设计

传统的mvc框架大多数是基于action设计的后缀式映射,然而,现在web流行rest风格的架构。尽管使用filter或者rewrite能够通过url重写实现rest风格的url,但是为什么不直接设计一个全新的rest风格的 mvc框架呢?本小节就是基于这种思路来讲述如何从头设计一个基于rest风格的mvc框架中的controller,最大限度地简化web应用的开发,甚至编写一行代码就可以实现“hello, world”。

controller作用

mvc设计模式是目前web应用开发中最常见的架构模式,通过分离 model(模型)、view(视图)和 controller(控制器),可以更容易实现易于扩展的用户界面(ui)。model指后台返回的数据;view指需要渲染的页面,通常是模板页面,渲染后的内容通常是html;controller指web开发人员编写的处理不同url的控制器,如前面小节讲述的路由就是url请求转发到控制器的过程,controller在整个的mvc框架中起到了一个核心的作用,负责处理业务逻辑,因此控制器是整个框架中必不可少的一部分,model和view对于有些业务需求是可以不写的,例如没有数据处理的逻辑处理,没有页面输出的302调整之类的就不需要model和view,但是controller这一环节是必不可少的。

日志和配置设计

日志和配置的重要性
前面已经介绍过日志在我们程序开发中起着很重要的作用,通过日志我们可以记录调试我们的信息,当初介绍过一个日志系统seelog,根据不同的level输出不同的日志,这个对于程序开发和程序部署来说至关重要。我们可以在程序开发中设置level低一点,部署的时候把level设置高,这样我们开发中的调试信息可以屏蔽掉。

配置模块对于应用部署牵涉到服务器不同的一些配置信息非常有用,例如一些数据库配置信息、监听端口、监听地址等都是可以通过配置文件来配置,这样我们的应用程序就具有很强的灵活性,可以通过配置文件的配置部署在不同的机器上,可以连接不同的数据库之类的。

这一章我们主要介绍了如何实现一个基础的go语言框架,框架包含有路由设计,由于go内置的http包中路由的一些不足点,我们设计了动态路由规则,然后介绍了mvc模式中的controller设计,controller实现了rest的实现,这个主要思路来源于tornado框架,然后设计实现了模板的layout以及自动化渲染等技术,主要采用了go内置的模板引擎,最后我们介绍了一些辅助的日志、配置等信息的设计,通过这些设计我们实现了一个基础的框架beego,目前该框架已经开源在github,最后我们通过beego实现了一个博客系统,通过实例代码详细的展现了如何快速的开发一个站点。

终于完了,感觉不是很理解,不过我大致理解了这种思想。