golang web框架設計3:controller設計


繼續學習golang web框架設計

golang web framework 框架系列文章:

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)
}

完整代碼:

代碼地址 controller.go


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM