猿问

避免代码重复

我正在尝试编写一个 Web 应用程序并努力编写干净的代码。


我有一个用于处理传入请求的控制器和所有控制器都将借用字段的基本控制器。


这是我的基本控制器


type Controller struct {

    Request  *http.Request

    Response http.ResponseWriter


    // Reqeust language

    lang string


    // HTML parts

    Title   string

    body    string

    head    string

    content string

    view    string

    errors  []string

    success []string

}

// And methods followed here

func (self *Controller) renderHeadView() { .....

和我的注册控制器


type Controller struct {

    base.Controller

    user *account

}


func (self *Controller) ServeHTTP(rw http.ResponseWriter, r *http.Request) {


    self.Title = "Sign Up"

    self.Request = r

    self.Response = rw


    self.lang = header.Language(self.Request)

    self.user = &account{lang: self.lang}


    switch self.Request.Method {

    case "GET":

        self.get()

    case "POST":

        if err := self.post(); err != nil {

            self.get()

        } else {

            // If everything was successfully

            return

        }


    }

    self.RenderResponseView()

}

和我的激活控制器


type Controller struct {

    base.Controller

}


func (self *Controller) ServeHTTP(rw http.ResponseWriter, r *http.Request) {


    self.Title = "Activate account"

    self.Request = r

    self.Response = rw

    self.lang = header.Language(self.Request)


    self.RenderResponseView()

}

如您所见,ServeHTTP 方法看起来几乎相同。我正在考虑将 ServeHTTP 移动到基本控制器中,然后提供一种调用特殊工作的方法。为了澄清我的意思,请查看以下代码片段(基本控制器)


func (self *Controller) ServeHTTP(rw http.ResponseWriter, r *http.Request) {


    self.Title = "Activate account"

    self.Request = r

    self.Response = rw

    self.lang = header.Language(self.Request)


    // here would come function for special work

    function()

    self.RenderResponseView()

}

我不知道如何提供这个实现。如果有人能给我一些建议,我会很高兴。


芜湖不芜
浏览 213回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答