I am trying to write a web application and given the effort to write clean code.
I have a controller for handle incoming request and base controller that all controller will borrow the fields.
This is my base controller
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() { .....
and my sign up controller
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()
}
and my activate controller
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()
}
As you can see, the ServeHTTP method looks pretty much the same. I am thinking of to move ServeHTTP into base controller and then provide an method to call for special work. To clarify what I mean look at the following code snippet(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)
// here would come function for special work
function()
self.RenderResponseView()
}
I have no idea how to provide this implementation. I would be very happy, if someone could give me some suggestions.