繼續學習golang web框架設計
golang web framework 框架系列文章:
- 7. golang web框架設計7:整合框架
- 6. golang web框架設計6:上下文設計
- 5. golang web框架設計5:配置設計
- 4. golang web框架設計4:日志設計
- 3. golang web框架設計3:controller設計
- 2. golang web框架設計2:自定義路由
- 1. golang web框架設計1:框架規划
controller作用
MVC設計模式里面的這個C,控制器。
- Model是后台返回的數據;
- View是渲染頁面,通常是HTML的模板頁面;
- Controller是處理不同URL的控制器
Controller在整個MVC框架中起到一個核心的紐帶作用,負責處理業務邏輯,因此控制器是整個框架必不可少的部分,Model和View有時候可以沒有,例如沒有數據處理的業務邏輯,沒有頁面的302等
Controller設計
前面小結路由實現注冊了struct的功能,而struct中實現了REST方式,所以我們要設計一個邏輯處理controller的基類,設計2個類型,一個struct,一個interface
type Controller struct {
Ct *Context
Tpl *template.Template
Data map[interface{}]interface{}
ChildName string
TplNames string
Layout []string
TplExt string
}
type ControllerInterface interface {
Init(ct *Context, cn string)
Prepare()
Get()
Post()
Delete()
Put()
Head()
Patch()
Options()
Finish()
Render() error
}
在前面第2節自定義路由
中的add函數,第二個參數ControllerInterface 就是這里定義的,因此,只要我們實現這個接口就可以了,所以我的基類Controller實現如下方法:
func (c *Controller) Init(ct *Context, cn string) {
c.Data = make(map[interface{}]interface{})
c.Layout = make([]string, 0)
c.TplNames = ""
c.ChildName = cn
c.Ct = ct
c.TplExt = "tpl"
}
func (c *Controller) Prepare() {
}
func (c *Controller) Finish() {
}
func (c *Controller) Get() {
http.Error(c.Ct.ResponseWriter, "Method Not Allowed", 405)
}