Skip to content

Commit

Permalink
diminuição da redundancia isolando a função template
Browse files Browse the repository at this point in the history
  • Loading branch information
wagnerdevocelot committed Aug 11, 2020
1 parent 2e5cf21 commit 78680cc
Showing 1 changed file with 28 additions and 9 deletions.
37 changes: 28 additions & 9 deletions wiki.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,18 @@ type Pagina struct {
Corpo []byte
}

// Observe que usamos quase exatamente o mesmo código de template em ambos os Handlers(view e edit).
// Vamos remover essa duplicação movendo o código de template para sua própria função

// Ela possui 3 parametros, ResponseWriter, tmpl que é uma string e um ponteiro para o struct Pagina
// O parseFiles vem pra função usando o segundo parametro como argumento e concatena com .html
// e então executa a função assim como faziamos nos Handler.

func renderizaTemplate(escrever http.ResponseWriter, tmpl string, pagina *Pagina) {
template, _ := template.ParseFiles(tmpl + ".html")
template.Execute(escrever, pagina)
}

// salvar persiste os dados da página
func (p *Pagina) salvar() error {
nomeDoArquivo := p.Titulo + ".txt"
Expand All @@ -29,28 +41,27 @@ func carregaPagina(titulo string) (*Pagina, error) {
return &Pagina{Titulo: titulo, Corpo: corpo}, nil
}

// Já que estamos trabalhando com templates agora, vamos criar um template para o nosso viewHandler
// Verifique o arquiv view.html

// Modifique viewHandler de acordo:
// E modifique os Handlers para usar essa função

// viewHandler escreve o titulo e corpo da pagina em html formatado
// viewHandler r o titulo e corpo da pagina em html formatado
func viewHandler(escrever http.ResponseWriter, ler *http.Request) {
titulo := ler.URL.Path[len("/view/"):]
pagina, _ := carregaPagina(titulo)
template, _ := template.ParseFiles("view.html")
template.Execute(escrever, pagina)
// Agora só precisamos chamar a função com os parametros exigidos diminuindo a redundância
renderizaTemplate(escrever, "view", pagina)
}

// E modifique os Handlers para usar essa função

// editHandler carrega um formulário de edição
func editHandler(escrever http.ResponseWriter, ler *http.Request) {
titulo := ler.URL.Path[len("/edit/"):]
pagina, err := carregaPagina(titulo)
if err != nil {
pagina = &Pagina{Titulo: titulo}
}
template, _ := template.ParseFiles("edit.html")
template.Execute(escrever, pagina)
// Agora só precisamos chamar a função com os parametros exigidos diminuindo a redundância
renderizaTemplate(escrever, "edit", pagina)
}

func main() {
Expand All @@ -59,3 +70,11 @@ func main() {
// http.HandleFunc("/save/", saveHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}

// Se comentarmos o registro do nosso saveHandler não implementado, podemos buildar e
// testar nosso programa mais uma vez.

// // $ go build wiki.go
// // $ ./wiki

// e na porta 8080 de localhost podemos mudar o path no browser entre view e edit

0 comments on commit 78680cc

Please sign in to comment.