O projeto "Explorando Marte" simula a exploração de um planalto em Marte por sondas robóticas. As sondas são posicionadas em um planalto com coordenadas específicas e recebem uma sequência de instruções para se mover e explorar a área. O objetivo é garantir que as sondas sigam as instruções corretamente, respeitem os limites do planalto e evitem colisões com outras sondas.
- .NET 8.0 SDK
- Visual Studio 2022 ou outro ambiente de desenvolvimento compatível
- Clone o repositório para o seu ambiente local:
git clone https://github.com/seu-usuario/explorando-marte.git
- Navegue até o diretório do projeto:
cd explorando-marte
- Restaure as dependências do projeto:
dotnet restore
- Compile e execute o projeto:
dotnet run --project ExplorandoMarte
-
Siga as instruções no console para fornecer as coordenadas do planalto e as posições iniciais das sondas.
-
Insira a sequência de instruções para cada sonda e observe os resultados no console.
- Navegue até o diretório de testes:
cd ExplorandoMarte.Tests
- Execute os testes:
dotnet test
O projeto utiliza o padrão de design Command Pattern para encapsular as instruções das sondas em objetos de comando. Isso promove a separação de responsabilidades e facilita a extensão e manutenção do código. O CommandInvoker
é responsável por gerenciar a execução dos comandos, garantindo que todas as instruções sejam executadas de forma centralizada.
- Controllers: Contém os controladores que gerenciam a lógica de negócios.
- Models: Contém as classes de modelo que representam as entidades do domínio, como
Rover
ePlanalto
. - Services: Contém os serviços que encapsulam a lógica de negócios e interagem com os repositórios.
- Repositories: Contém os repositórios que gerenciam o acesso aos dados.
- Commands: Contém os comandos que encapsulam as instruções das sondas.
- Invokers: Contém o invocador que gerencia a execução dos comandos.
- Interfaces: Contém as interfaces que definem os contratos para os serviços e repositórios.
- Tests: Contém os testes unitários para garantir a qualidade e a correção do código.
O projeto inclui validações para garantir que as coordenadas e direções das sondas sejam válidas e que as sondas não se movam além dos limites do planalto ou para posições já ocupadas por outras sondas. Exceções são lançadas para tratar entradas inválidas e movimentos inválidos. Tudo registrado em um arquivo log localizado em "C:\ExplorandoMarte\logs\log.txt"
Para fazer o debugging no VSCode, siga os passos abaixo:
- Abra o projeto no VSCode.
- Coloque pontos de interrupção (breakpoints) no código onde deseja inspecionar a execução.
- Pressione
F5
ou vá para o menuRun
e selecioneStart Debugging
. - O VSCode iniciará o projeto e parará nos pontos de interrupção definidos, permitindo que você inspecione variáveis e o fluxo de execução.
- Utilize F10 para avançar cada passo.
- Utilize F11 para entrar nos métodos e fazer o debug.
O pipeline de CI foi configurado para garantir que todas as alterações no código sejam testadas automaticamente. O pipeline executa os testes unitários e verifica se o código está em conformidade com os padrões definidos.
O pipeline de CI está definido no arquivo .github/workflows/dotnet-desktop.yml
e realiza as seguintes etapas:
- Checkout do código: Faz o checkout do código do repositório.
- Configuração do .NET: Configura o ambiente .NET com a versão 8.0.x.
- Restaurar dependências: Restaura as dependências do projeto.
- Build: Compila o projeto na configuração Release.
- Executar testes: Executa os testes do projeto.
- Publicar: Publica o projeto no diretório especificado.
- Upload de artefatos de build: Faz o upload dos artefatos de build para o GitHub.
- Acesse a aba
Actions
no repositório do GitHub. - Selecione o workflow desejado para ver os detalhes da execução.
- Verifique os logs para identificar possíveis falhas e corrigi-las.
- O projeto foi estruturado para ser extensível e fácil de manter.
- O uso do Command Pattern facilita a adição de novas instruções no futuro.
- A validação rigorosa garante que as sondas operem dentro dos limites definidos e evitem colisões.