如何設計一個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實作了一個博客系統,通過實體代碼詳細的展現了如何快速的開發一個站點,
終于完了,感覺不是很理解,不過我大致理解了這種思想,
鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/47176.html
標籤:Go
上一篇:goweb-部署與維護
下一篇:goweb-擴展Web框架
