Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Framework, Linguagem e Ferramentas
Para este projeto, utilizei as seguintes tecnologias e ferramentas:
Frontend: Utilizei Angular por seu poderoso sistema de módulos, facilidade de criação de Single Page Applications (SPA), e por ser uma escolha confiável para projetos com demandas de escalabilidade e performance. Angular CLI também facilitou o setup e o desenvolvimento, permitindo geração rápida de componentes e serviços.
Backend: Usei NestJS, um framework em Node.js que se destaca pela estrutura modular e arquitetura em camadas, muito similar ao Spring Boot, o que facilita a manutenção e escalabilidade do código. A integração com o TypeScript e o suporte a injeção de dependências também contribuíram para uma estrutura mais organizada e orientada a serviços.
Banco de Dados: Escolhi PostgreSQL como banco de dados relacional para aproveitar suas funcionalidades avançadas e sua integração com o NestJS, ideal para garantir a consistência dos dados.
Ferramentas de Deploy e Versionamento: Usei o AWS Elastic Beanstalk para o deploy e Docker para padronizar os ambientes de desenvolvimento e produção, o que facilita o CI/CD. Utilizei Git para o controle de versão.
Tecnologias X e Y
Optei por Angular e NestJS considerando os seguintes pontos:
Angular vs. React: Angular possui uma estrutura mais organizada para projetos de grande porte, com injeção de dependências e sistema de rotas embutidos, além de ser ideal para SPAs com necessidade de modularidade e organização de serviços.
NestJS vs. Express.js: Enquanto o Express.js é uma ótima opção para APIs REST simples, o NestJS é mais indicado para projetos escaláveis devido à sua arquitetura baseada em módulos e uso de TypeScript, além do suporte nativo para microservices.
PostgreSQL vs. MongoDB: PostgreSQL foi a escolha pelo suporte a transações e funcionalidades SQL avançadas, mais adequado para um projeto com relacionamentos complexos e estrutura de dados consistente.
Princípios de Engenharia de Software
Apliquei vários princípios de engenharia de software durante o desenvolvimento, entre eles:
SOLID: Utilize esses princípios especialmente no backend com NestJS, estruturando módulos e serviços de maneira que cada um tenha uma responsabilidade única e clara.
DRY (Don’t Repeat Yourself): Criei serviços e componentes reutilizáveis no Angular para evitar redundâncias, facilitando a manutenção.
Inversão de Dependência: Com o NestJS, utilizei injeção de dependências extensivamente, o que facilitou o gerenciamento de dependências e isolou módulos para testes.
Desafios e Problemas
Alguns desafios enfrentados durante o desenvolvimento:
Comunicação Frontend e Backend: Configurar o CORS no NestJS foi essencial para permitir que o frontend Angular se comunicasse com o backend, especialmente em ambiente de desenvolvimento.
Modularização no Angular: Gerenciar a organização dos módulos de forma a manter uma hierarquia clara e evitar dependências circulares foi desafiador. Resolvi isso utilizando módulos dedicados para componentes compartilhados e serviços.
Gerenciamento de Estado: Com Angular, a implementação de NgRx para o gerenciamento de estado foi desafiadora, mas essencial para garantir que os dados fossem mantidos e sincronizados adequadamente na aplicação.
Melhorias e Próximas Implementações
Otimização de Performance: Considero implementar cacheamento no backend NestJS para operações de leitura frequentes, o que deve melhorar o desempenho da aplicação.
Testes Automatizados: Pretendo incluir mais testes unitários e de integração com Jest no backend e Karma no Angular para garantir a robustez da aplicação.
Autenticação e Autorização: Melhorar a autenticação com a inclusão de JWT expiração e renovação automática de tokens, aumentando a segurança.
Vídeo de Apresentação
O vídeo de demonstração está disponível neste link: https://youtu.be/7iE41lMil0k
Sobre Mim
Meu nome é Ronaldo, sou de São José do Rio Preto, São Paulo, e trabalho com desenvolvimento de software há alguns anos. Sou estudante de Análise e Desenvolvimento Sistemas e já trabalhei em projetos que envolvem desde marketing digital até a criação de sistemas de controle de estoque, sempre buscando aprender novas tecnologias e aplicar boas práticas de desenvolvimento. Atualmente, estou à frente da Venturea.pro, uma agência de marketing digital que fundei com o intuito de ajudar empresas a crescerem no mercado digital.
Outros Detalhes
Estou à disposição para discutir o projeto em mais detalhes e esclarecer qualquer dúvida sobre a implementação ou melhorias.
Contato
Email: [email protected]
Telefone: (17) 99677-4840