Organizando o código

Aproveitando que estamos falando sobre a separação de responsabilidades, vamos fazer mais algumas modificações para deixar o código mais organizado e mais fácil de ser mantido. Do mesmo jeito que separamos uma pasta para os respositórios, vamos separar uma pasta para os controladores. Crie uma nova pasta chamada controller e mova o ProductController para dentro dela. A medida que a aplicação vai crescendo, novos controladores e novos respositórios são necessários, logo é interessante separar essas classes em pacotes diferentes.

Do mesmo jeito que novos controladores e respositórios são necessários, novas páginas html também são. Até agora criamos todas os arquivos html na mesma pasta templates, você já deve ter percebido que se quisermos criar uma nova lista de categorias por exemplo, teríamos que criar um arquivo list-categories.html na mesma pasta. Isso não é muito legal, pois a pasta templates vai ficando cada vez mais cheia. Para resolver esse problema, vamos criar uma pasta para cada entidade da aplicação. Crie uma pasta chamada product dentro da pasta templates e mova todos os arquivos html relacionados a produtos para dentro dela. Sua estrutura deve ficar similar a mostrada abaixo.

Por fim, como alteramos a localização dos arquivos html, precisamos refatorar o código no controlador que carrega os arquivos de visão. Acesse o arquivo ProductController e para cada método que retorne uma visão, adicione o trecho product/ para avisar o Thymeleaf que os arquivos html estão dentro da pasta product. O código abaixo mostra um exemplo.

1
@GetMapping("/products")
2
public String index(Model model) {
3
model.addAttribute("products", productRepository.findAll());
4
return "product/list";
5
}

Terminada as alterações, acesse a aplicação e verifique se tudo está funcionando corretamente.