Olá! Sou o Daniel Artine e serei seu instrutor neste curso de .NET 8 utilizando C# e Exceptions.
Audiodescrição: Daniel é uma pessoa de pele clara, cabelos, olhos e barba castanhos-escuros. Usa uma camiseta preta e está sentado em uma cadeira gamer. Ao fundo, uma parede lisa com iluminação azul.
O projeto do curso será baseado na Adopet, um sistema para adoção de animais de estimação. O objetivo é permitir que pessoas cadastrem tanto animais disponíveis para adoção quanto tutores, ou seja, aquelas que se responsabilizam pela adoção.
Vamos trabalhar com os conceitos de animais, adoção e tutores dentro do sistema, mas sem nos aprofundarmos em relacionamentos de banco de dados ou tópicos avançados. Haverá algumas abstrações, porém nosso foco principal será nas exceções.
O curso demonstrará como o sistema funciona na prática, mostrando a interação das pessoas. Não abordaremos front-end ou apresentação visual, mas sim a lógica da API que sustenta o Adopet.
Lidaremos com uma API, incluindo conceitos de controladores e ações que já estarão praticamente desenvolvidas. Nosso objetivo será entender e aplicar conceitos de exceções: como lançar, o que são, como capturá-las e como evitar que erros inesperados comprometam a execução da aplicação.
Exploraremos a criação de exceções, tanto personalizadas quanto as exceções padrão do C#. Esperamos que você aproveite o conteúdo, pois aprenderemos muito sore o tratamento de exceções.
Até a primeira aula!
Para iniciarmos nosso projeto, vamos explorar brevemente do que ele se trata, discutir seu funcionamento e interagir para entender como a aplicação está operando atualmente.
Antes disso, é importante destacar que, se ainda não compreendemos o que é um controlador, o que é o
ControllerBase
, como se conecta a um banco de dados ou a função de determinadas anotações, recomendamos fortemente a realização dos cursos pré-requisitos.Esse conhecimento é fundamental para que possamos absorver o conteúdo por completo e entender as questões de exceções no contexto de APIs.
Com os controladores já definidos, precisamos entender a função de cada um e como o sistema opera como um todo. Nosso sistema, chamado Adopet, é voltado para a adoção de animais de estimação e conta com os controladores AdocaoController()
, PetController
e TutorController
.
Esse é um sistema que permite o cadastro de tutores, pessoas interessadas em adotar, animais disponíveis e o gerenciamento das adoções. Todas essas informações são armazenadas no banco de dados SQLite, no arquivo Adocoes.db
, que gerencia esses dados. A comunicação com o SQLite é feita por meio de uma connection string, responsável pela conexão com o banco.
Vamos executar a aplicação e utilizar o Postman para interagir com o sistema, já que estamos trabalhando com uma API sem front-end. Para isso, no VS Code, na barra de menu superior, clicamos em "Depurar > Iniciar sem depurar".
Abrimos o Postman nos permite enviar requisições de várias formas para a API. Para facilitar a interação, disponibilizamos uma coleção de requisições para importar no Postman, evitando a necessidade de copiar cada passo manualmente.
Para seguir os próximos passos é necessário que você crie uma conta e esteja logado. Feito isso, para importar, na barra de menu superior, clicamos em "Import".
Nisso abre uma janela para selecionar os arquivos e realizar a importação. Selecionamos o Adopet.postman-collection.json
. Assim, conseguiremos interagir com a aplicação.
Por exemplo, se quisermos cadastrar um tutor, acessamos Cadastrar Tutor
. Nisso, encontramos a base de código abaixo.
{
"nome": "João das Couves",
"email": "email@example.com"
}
Para executar, clicamos no botão "Send" na lateral superior direita. Nisso, temos um status code 200, indicando que deu tudo certo.
Feito isso, acessamos o arquivo Buscar todos os tutores
para fazermos um GET
. Clicamos no botão "Send" e assim temos o retorno abaixo.
{ "id":1, "nome": "João das Couves", "email": "email@example.com" }
O mesmo procedimento se aplica ao cadastro de um animal. Acessamos o Cadastrar Pet
, clicamos em "Select files > New file from local machine" e selecionamos uma imagem. Preenchemos também os campos de nome, idade, tipo e porte, e enviamos a requisição clicando em "Send".
Caso ocorra um problema, como um Bad Request, pode ser devido a uma perda de pacote. No entanto, ao reenviar a requisição, ela deve ser processada corretamente.
Após, para fazermos um GET
, acessamos o Buscar por todos os tutores
e clicamos no botão "Send". Assim, temos o retorno abaixo:
[ { "id": 1, "nome": "Lua" "idade": 5, "tipo": 0, "adotado": false, "imagem": "833775f9-95df-465b-9c28-a49c5ba3997d.jpg" } ]
Se acessarmos o VS Code, na pasta "storage", temo a imagem "833775f9" referente a um gato.
Além disso, também podemos solicitar a adoção do animal de id 1, que é a "Lua" e o tutor de id 1, "João das Couves". Para isso, em Solicitar Adoção
, clicamos em "Send".
{
"idPet":1,
"idTutor":1,
}
Adoção solicitada com sucesso!
Assim, a solicitação entra em análise. Clicamos em Buscar todas as adoções
e depois em "Send", assim, temos a informação abaixo:
[ { "id": 1, "tutor": "pet": 1, "motivo": "Um motivo qualquer", "status": 0, "justificativa": null } ]
Podemos, então, aprovar essa adoção acessando Aprovar adoção
seguido de "Send".
{
"idAdocao": 1
}
Feito isso, se voltarmos no GET
de Buscar todas as adoções
e clicarmos em "Send" o status passa a ser "1". Isso significa que foi aprovado.
No projeto temos os status 1 Aguardando avaliação, status 2 aprovado e 3 reprovado.
Se tentarmos realizar uma ação inválida, como solicitar a adoção de um animal inexistente, recebemos um erro 500 internal server error. Isso indica que houve um problema na atualização do banco de dados e a requisição não foi processada corretamente, resultando nesse erro.
Precisamos compreender o significado dessas informações e como elas são exibidas em uma aplicação .NET para facilitar a análise. Esse será o tema do próximo vídeo. Até lá!
Para compreendermos melhor, disponibilizamos um projeto que usaremos apenas para visualizarmos o conceito de forma mais clara.
Esse projeto tem um método main
que chama o Metodo1()
, que chama o Metodo2()
. No Metodo2()
, é criado uma pessoa usuária chamada "Fulano", definida na classe Usuário
no mesmo arquivo, e exibimos [Fim] - Metodo2
.
Ao executar o projeto, o terminal exibe o retorno abaixo:
[Inicio] - Main
[Inicio] - Metodol
[Inicio] - Metodo2
Fulano
[Fim] - Metodo2
[Fim] - Metodol
[Fim] - Main
Isso acontece porque o código segue essa ordem: começamos com [Inicio] - Main
, depois o Metodo1()
que exibe o [Inicio] Metodo1
, seguido por Metodo2()
que exibe [Inicio] Metodo2
. Após o usuário é criado e seu nome é exibido. Por fim o Metodo2()
é finalizado, seguido do Metodo1()
, até chegar à conclusão da main
.
Essas informações foram empilhadas. Esse conceito pode ser comparado a uma pilha de pratos, onde colocamos um prato sobre o outro e retiramos sempre o do topo.
O console, ao chamar a main
, exibe [Inicio] - Main
, depois chama o Metodo1()
, que exibe [Inicio] - Metodo1
, e em seguida o Metodo2()
, que exibe [Inicio] - Metodo2
e "fulano". Após [Fim] - Metodo2
, assim o Metodo2()
sai da pilha, seguido pelo Metodo1()
e, por fim, a main
.
Esse conceito de pilha é chamado LIFO, Last In, First Out, onde o último elemento a entrar é o primeiro a sair. No nosso exemplo, o último a entrar foi o Metodo2()
e o primeiro a sair também foi o Metodo2()
. O primeiro a entrar foi o main
e o último a sair também. Essa pilha de execução é o que determina a sequência de chamadas dos métodos na aplicação.
Quando ocorre um erro, a lógica se aplica da mesma forma. Vamos fazer um teste. Para isso, no VS Code, voltamos ao código do arquivo PilhaDeExecucao.cs
.
Queremos provocar um erro. Para isso, na linha de código Usuario usuario
, apagamos o trecho new Usuario("Fulano")
e passamos null
.
//Código omitido
Usuario usuario = null;
//Código omitido
Ao fazer isso, o próprio VS Code alerta que esse valor pode ser nulo. Ao executar o código, a main
é executada, assim como o Metodo1
e Metodo2
. Depois disso a execuçao é interrompida.
No Postman, acontece algo semelhante. No projeto Adopet, se analisarmos o fluxo de adoção, ao solicitar a adoção entramos no método que busca por um pet e um tutor e faz a adição no repositório.
Nesse caso, isso significa que o pet e o tutor podem ser nulos. Por exemplo, ao enviar um pet com um ID inexistente, ele não recupera a informação do banco, ocasionando um resultado nulo e impossibilitando a operação.
Entendemos como a pilha se comporta tanto nos projetos de demonstração quanto na Adopet. Agora, podemos avançar para aprender como evitar que isso aconteça com a pilha e gerenciar a aplicação de modo que ela não seja encerrada inesperadamente.
Esse tema será abordado nos próximos vídeos. Até mais!
O curso C# e Exceções: construa aplicações resilientes possui 108 minutos de vídeos, em um total de 44 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.