goweb-如何設計一個Web框架

如何設計一個Web框架

前面十二章介紹瞭如何經過Go來開發Web應用,介紹了不少基礎知識、開發工具和開發技巧,那麼咱們這一章經過這些知識來實現一個簡易的Web框架。經過Go語言來實現一個完整的框架設計,這框架中主要內容有第一小節介紹的Web框架的結構規劃,例如採用MVC模式來進行開發,程序的執行流程設計等內容;第二小節介紹框架的第一個功能:路由,如何讓訪問的URL映射到相應的處理邏輯;第三小節介紹處理邏輯,如何設計一個公共的controller,對象繼承以後處理函數中如何處理response和request;第四小節介紹框架的一些輔助功能,例如日誌處理、配置信息等;第五小節介紹如何基於Web框架實現一個博客,包括博文的發表、修改、刪除、顯示列表等操做。git

經過這麼一個完整的項目例子,我指望可以讓讀者瞭解如何開發Web應用,如何搭建本身的目錄結構,如何實現路由,如何實現MVC模式等各方面的開發內容。在框架盛行的今天,MVC也再也不是神話。常常聽到不少程序員討論哪一個框架好,哪一個框架很差, 其實框架只是工具,沒有好與很差,只有適合與不適合,適合本身的就是最好的,因此教會你們本身動手寫框架,那麼不一樣的需求均可以用本身的思路去實現。程序員

我以爲這一章像是在將一個項目,認真學習項目,摘錄就少一點····github

一個基礎的目錄接結構

|——main.go         入口文件
|——conf            配置文件和處理模塊
|——controllers     控制器入口
|——models          數據庫處理模塊
|——utils           輔助函數庫
|——static          靜態文件目錄
|——views           視圖庫

beego框架路由實現

目前幾乎全部的Web應用路由實現都是基於http默認的路由器,可是Go自帶的路由器有幾個限制:golang

不支持參數設定,例如/user/:uid 這種泛類型匹配
沒法很好的支持REST模式,沒法限制訪問的方法,例如上面的例子中,用戶訪問/foo,能夠用GET、POST、DELETE、HEAD等方式訪問
通常網站的路由規則太多了,編寫繁瑣。我前面本身開發了一個API應用,路由規則有三十幾條,這種路由多了以後其實能夠進一步簡化,經過struct的方法進行一種簡化
beego框架的路由器基於上面的幾點限制考慮設計了一種REST方式的路由實現,路由設計也是基於上面Go默認設計的兩點來考慮:存儲路由和轉發路由web

存儲路由

針對前面所說的限制點,咱們首先要解決參數支持就須要用到正則,第二和第三點咱們經過一種變通的方法來解決,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設置高,這樣咱們開發中的調試信息能夠屏蔽掉。架構

配置模塊對於應用部署牽涉到服務器不一樣的一些配置信息很是有用,例如一些數據庫配置信息、監聽端口、監聽地址等都是能夠經過配置文件來配置,這樣咱們的應用程序就具備很強的靈活性,能夠經過配置文件的配置部署在不一樣的機器上,能夠鏈接不一樣的數據庫之類的。app

這一章咱們主要介紹瞭如何實現一個基礎的Go語言框架,框架包含有路由設計,因爲Go內置的http包中路由的一些不足點,咱們設計了動態路由規則,而後介紹了MVC模式中的Controller設計,controller實現了REST的實現,這個主要思路來源於tornado框架,而後設計實現了模板的layout以及自動化渲染等技術,主要採用了Go內置的模板引擎,最後咱們介紹了一些輔助的日誌、配置等信息的設計,經過這些設計咱們實現了一個基礎的框架beego,目前該框架已經開源在GitHub,最後咱們經過beego實現了一個博客系統,經過實例代碼詳細的展示瞭如何快速的開發一個站點。

終於完了,感受不是很理解,不過我大體理解了這種思想。

連接

相關文章
相關標籤/搜索