|
| 1 | +--- |
| 2 | +title: 🟢 Aplicação Crud |
| 3 | +description: Desafio 5 é sobre refatorar uma aplicação crud is about refactoring a crud application |
| 4 | +author: thomas-laforge |
| 5 | +challengeNumber: 5 |
| 6 | +command: angular-crud |
| 7 | +sidebar: |
| 8 | + order: 2 |
| 9 | +--- |
| 10 | + |
| 11 | +## Informação |
| 12 | + |
| 13 | +Comunicar e ter um estado global/local em sincronia com seu backend é o coração de qualquer aplicação. Você necessitará dominar as seguintes melhores práticas para construir aplicações Angular fortes e confiáveis. |
| 14 | + |
| 15 | +## Declaração |
| 16 | + |
| 17 | +Neste exercício, você tem uma pequena aplicação CRUD, que tem uma lista de TODOS, atualiza e exclui alguns todos. |
| 18 | + |
| 19 | +Atualmente temos um exemplo funcional, mas cheio de más práticas. |
| 20 | + |
| 21 | +### Passo 1: refatorar com melhores práticas |
| 22 | + |
| 23 | +O que você precisará: |
| 24 | + |
| 25 | +- Evite **any** como um tipo. Use Interface para aproveitar o sistema de tipos do Typescript para evitar erros |
| 26 | +- Use um **serviço separado** para todas suas chamadas http e use um **Signal** para sua lista de todos |
| 27 | +- Não **mute** em seus dados |
| 28 | + |
| 29 | +```typescript |
| 30 | +// Evite isto |
| 31 | +this.todos[todoUpdated.id - 1] = todoUpdated; |
| 32 | + |
| 33 | +// Prefira algo assim, mas precisa melhorar, porque queremos manter a mesma ordem. |
| 34 | +this.todos = [...this.todos.filter((t) => t.id !== todoUpdated.id), todoUpdated]; |
| 35 | +``` |
| 36 | + |
| 37 | +### Passo 2: Melhore |
| 38 | + |
| 39 | +- Adicione um botão **Deletar**: _<a href="https://jsonplaceholder.typicode.com/" target="_blank">Documentação de API falsa</a>_ |
| 40 | +- Lide com **erros** corretamente. _(Globalmente)_ |
| 41 | +- Adicione um indicador de **carregamento** global. _Você pode usar MatProgressSpinnerModule_ |
| 42 | + |
| 43 | +### Passo 3: Manutenibilidade!! adicione alguns testes |
| 44 | + |
| 45 | +- Adicione 2/3 testes |
| 46 | + |
| 47 | +### Step 4: Incrível!!! domine seu estado. |
| 48 | + |
| 49 | +- Use o **componente store do ngrx**, **ngrx/store**, **rxAngular**, **tanstack-query** ou **ngrx/signal-store** como estado local de seu componente. |
| 50 | +- Tenha um indicador de carregamento/erro **localizado**, e.g. apenas no Todo sendo processado e **desabilite** todos os botões do Todo processado. _(Dica: você precisará criar um ItemComponent)_ |
0 commit comments