我正在尝试编写一个 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()
}
我不知道如何提供这个实现。如果有人能给我一些建议,我会很高兴。
相关分类