O desafio consiste no desenvolvimento de um RPA simples que realiza uma busca automaizada no site da Alura (https://www.alura.com.br/) e grava os resultados em um banco de dados. A automação deve realizar de forma automática a busca no site da Alura por algum termo de sua escolha, por exemplo, “RPA”.
A automação deverá adicionar o termo no campo da busca, posteriormente realizar o check no filtro de Cursos e realizar a pesquisa.
Com o retorno da pesquisa salvar no banco de dados os seguintes dados:
• Titulo; • Professor (Pode ser um ou todos); • Carga Horária; • Descrição;
Ex: Titulo = “Formação Modelagem e Melhorias de Processos de Negócios”; Professor= “Enio Moraes”; Carga Horaria = “86h”; Descrição = “Um dos maiores desafios das organizações diz respeito à melhoria dos resultados de desempenho de negócios com agilidade operacional. Logo, conhecer de maneira clara os processos propicia uma gestão mais eficiente e viabiliza a implantação de melhorias e mudanças de forma organizada, gerenciável e previsível. Nesse sentido, a modelagem e consequente melhoria nos processos pode ser a chave para o sucesso da sua empresa...”;
O desafio consiste no desenvolvimento de um RPA simples que realiza uma busca automaizada no site da Alura (https://www.alura.com.br/) e grava os resultados em um banco de dados.
Você não precisa se preocupar com o design. Esse não é o objetivo do desafio.
• A abordagem Domain-Driven Design (DDD) em conjunto com a injeção de dependência em C# ajuda a estruturar um RPA de forma que seja modular, altamente coeso e de fácil manutenção. A injeção de dependência é usada para desacoplar as dependências entre classes e permitir a fácil substituição de implementações. Tendo como vantagens, por exemplo:
- Isolamento do Domínio;
- Flexibilidade e Testabilidade;
- Facilidade de Manutenção, entre outros;
Você ganha mais pontos se:
- Criar validações de erros, caso o dado não exista ou campo da busca não existir;
- Boa documentação de código e de serviços;
Fora isso, sinta-se a vontade para: • Usar qualquer forma de persistência de dados; • E seguir a nossa sugestão de estrutura de pastas no desafio:
o Apresentação; o RPA; o Dominio; o Infraestrutura; o Injeção de Dependência.
- Que o código seja feito em C#
- Utilização do framework Selenium
- Utilização da abordagem DDD com injeção de dependência
Sua aplicação preenche os requisitos básicos; Manutenabilidade, clareza e limpeza de código, resultado funcional, entre outros fatores; Explique as decisões técnicas tomadas, as escolhas por bibliotecas e ferrramentas; Fluxo da aplicação; Se você tratou bem com erros e casos inesperados; Se usou Webdriver; Se fez uso do GitFlow;
Para esse projeto eu tomei a decisão de criar um projeto Worker.
[WORKER] Um Worker Service no .NET é um modelo de projeto usado para criar serviços de longa duração que rodam em segundo plano. Ele foi introduzido no .NET Core 3.0 e é ideal para tarefas que precisam ser executadas continuamente ou em intervalos regulares, como processamento de filas de mensagens ou execução de tarefas agendadas.
[DDD]
Camadas da Aplicação:
[Apresentação]
Bibliotecas utilizadas:
| Bibliotecas | |
| Serilog.AspNetCore | Biblioteca de logging estruturado, que permite capturar, analisar e armazenar logs de forma estruturada e consultável. |
| Selenium.WebDriver | Biblioteca que permite interação com páginas da web, execução de ações do usuário e validação de comportamentos. |
| Dapper | O Dapper é uma biblioteca de mapeamento objeto-relacional (ORM) para .NET, conhecida por ser extremamente rápida e eficiente. Ele permite que desenvolvedores acessem dados de diversas fontes, como bancos de dados relacionais e NoSQL, de maneira simples e direta. |
https://renatogroffe.medium.com/novidades-do-net-core-3-0-worker-services-a885b9b4ce02 https://learn.microsoft.com/pt-br/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design