Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Projeto] Desafio - Fipe

Olá, boa tarde!!
Fiz o melhor que pude. O resultado saiu como esperado, mas eu poderia ter feito melhor. Ainda me "enrolo" com certos códigos e onde eles se encaixam. Na verdade, essa é a minha maior dificuldade. Alguém tem alguma dica para me dar em relação a isso? fora treinar mais... e uma rotina de treinos sobre isso, se possível. Obrigada!!!
https://github.com/Giuliaaraujo98/ROADTRIP2.git

2 respostas
solução!

Olá, Giulia. Como vai?

Primeiramente, parabéns por concluir o desafio da Tabela FIPE! Esse projeto é um grande marco no desenvolvimento Java, pois exige a integração de conceitos avançados como consumo de APIs, conversão de JSON com Jackson, manipulação de coleções e o uso intenso de Streams e Lambdas. Se o resultado saiu como esperado, sinta orgulho: a lógica principal você já domina!

Essa sensação de se "enrolar" sobre onde cada código se encaixa é a dúvida mais comum de quem está fazendo a transição da lógica de programação pura para a arquitetura de sistemas com Spring Framework. Não se preocupe, isso faz parte da curva de aprendizado.

Para te ajudar a clarear a mente sobre a organização dos arquivos e estruturar uma rotina eficiente, separei algumas dicas e um modelo de estudos prático:

1. Entendendo o "Encaixe" (Arquitetura)

No Spring, nós dividimos o código em "camadas", onde cada classe tem apenas uma responsabilidade. Para o projeto da FIPE, pense no fluxo dos dados como uma linha de produção:

  • Camada de Serviço (service): É a engenharia mecânica do projeto. Aqui ficam as classes genéricas que fazem o trabalho bruto, como a ConsumoApi (que busca o JSON na web) e a ConverteDados (que transforma o JSON em objetos Java). Elas não sabem o que estão baixando, apenas cumprem a função de buscar e converter.
  • Modelos/DTOs (model): São as estruturas dos dados (os moldes). Classes ou records como DadosMarcas, DadosModelos e Veiculo servem apenas para mapear os campos que vêm da API da FIPE.
  • Classe Principal (Principal ou main): É o maestro. Ela interage com o usuário no console (Scanner), chama o ConsumoApi, passa o resultado para a ConverteDados e usa as Streams para filtrar e exibir os resultados na tela.

Quando você precisar criar um código novo, pergunte-se: "Isso é uma regra de negócio/exibição (vai para a Principal), é uma estrutura de dados (vai para o Model) ou é uma ferramenta genérica de sistema (vai para o Service)?".


2. Rotina de Treinos: O Método do "Código Espelho"

Para destravar essa habilidade de organização sem precisar apenas "fazer mais do mesmo", experimente uma rotina baseada em analogia estrutural:

  • Semana 1 - O Projeto Original: Revise o seu projeto da FIPE. Escreva comentários em cima de cada método explicando com suas próprias palavras o que ele faz e quem o chamou.

  • Semana 2 - O Projeto Espelho: Crie um projeto do zero, sem olhar o código da FIPE, mas para consumir uma API completamente diferente, que use a mesma estrutura de agrupamento.

  • Sugestão: Use a API pública do Star Wars (SWAPI). O fluxo é idêntico ao da FIPE: listar os Filmes -> escolher um Filme -> listar os Personagens daquele filme -> buscar os detalhes de um Personagem específico.

  • Semana 3 - Refatoração com Streams: Pegue seus laços for tradicionais e gaste um tempo da sua rotina tentando convertê-los em .stream().filter().map().collect(). O segredo das Streams é a leitura declarativa: faça o código parecer uma frase em inglês.

A consistência vai vencer a sensação de confusão. Quanto mais você repetir a mesma estrutura de camadas em contextos diferentes (FIPE, Star Wars, Livros), mais automático se tornará o "encaixe" na sua mente. O seu código no GitHub está no caminho certo, continue firme!

Espero que possa ter lhe ajudado!

Entendi perfeitamente
Muito obrigada pelas dicas!!!
Irei iniciar hoje a rotina de treinos. :)