No projeto que desenvolvi, priorizei o uso de boas práticas e padrões amplamente reconhecidos na engenharia de software, buscando criar um sistema robusto, escalável e bem testado. Aqui alguns conceitos aplicados durante o desenvolvimento:
Adotei a abordagem TDD (Test-Driven Development), seguindo os passos Red, Green e Refactor. Inicialmente, escrevi testes que falhavam (Red) para cada funcionalidade. Em seguida, implementei o código mínimo necessário para que os testes passassem (Green). Por fim, refatorei o código, mantendo a funcionalidade intacta e garantindo maior clareza e eficiência.
Implementei o princípio de Design by Contracts para definir contratos claros entre métodos e suas chamadas. Estabeleci pré-condições, pós-condições e invariantes que guiaram o comportamento do sistema, garantindo a consistência e prevenindo erros inesperados.
A aplicação foi desenvolvida com base nos pilares da OOP: encapsulamento, herança, abstração e polimorfismo. Modelei o sistema de forma que as entidades do domínio refletissem a realidade do problema, com separação clara de responsabilidades e alto nível de reutilização de código.
Realizei uma análise detalhada para modelar o domínio da aplicação, identificando entidades, valores e agregados principais. Essa modelagem foi crucial para garantir que o sistema atendesse aos requisitos do negócio de maneira precisa.
Implementei validações rigorosas para as entidades do domínio, assegurando integridade e consistência. Cada validação foi acompanhada de testes unitários para garantir sua eficácia em diferentes cenários.
Segui o padrão CQRS (Command Query Responsibility Segregation) para separar responsabilidades de leitura (queries) e escrita (commands). Criei queries otimizadas para buscar dados e implementei testes de unidade para validar seu funcionamento.
Os commands foram implementados para representar ações específicas no sistema. Cada command foi extensivamente testado por meio de testes de unidade, garantindo que os dados fornecidos fossem processados corretamente.
Desenvolvi handlers para processar os commands e executar as regras de negócio correspondentes. Testes de unidade foram escritos para cada handler, assegurando a execução precisa das operações definidas.
Implementei o Repository Pattern para abstrair a lógica de acesso ao banco de dados, proporcionando uma camada clara e desacoplada para gerenciar a persistência dos dados.
Para garantir que os testes fossem independentes do banco de dados, criei repositórios mockados. Isso permitiu testar a lógica de negócio isoladamente, assegurando alta cobertura e confiança no sistema.
O resultado foi um sistema bem estruturado, com alta manutenibilidade e confiabilidade. A adoção dessas práticas possibilitou a criação de um software robusto, onde as funcionalidades estão devidamente testadas e o comportamento esperado é garantido.
Este projeto foi um exercício valioso para aplicar teoria à prática e consolidar meu conhecimento em engenharia de software e boas práticas de desenvolvimento.
- .NET 8
- Flunt
- MSTest
Rômulo de Oliveira |
---|
.NET Developer |