-
Notifications
You must be signed in to change notification settings - Fork 0
Arquitetura
Adotou-se o padrão arquitetural em camadas da Clean Architecture com modelagem a partir dos princípios do Domain Driven Design (DDD). DDD é uma abordagem ao desenvolvimento de software para necessidades complexas, ligando a implementação a um modelo em evolução, auxiliando a criação de uma base de códigos módular e de fácil manutenção.
Uma solução DDD, pode ser divididas em quatro camadas principais:
Camada de Domínio: implementa o núcleo, a lógica comercial independente do caso de uso do domínio/sistema. Camada de Aplicação: implementa os casos de uso da aplicação com base no domínio. Um caso de uso pode ser pensado como uma interação do usuário na Interface do Usuário (IU). Camada de Infraestrutura: contém os elementos (páginas, componentes) da interface de usuário (IU) da aplicação. Camada de Apresentação: suporta outras camadas, implementando as abstrações e integrações à biblioteca e sistemas de terceiros.
-
Domínio:
- Componente: Entidade que é associada à peça de computador, onde encontram-se tanto informações técnicas quanto voláteis das mesmas.
- Scraper: Entidade responsável por extrair os dados voláteis presentes em sites de comércio eletrônico.
- Computador: Agregado de componentes.
- Usuário: Agregado de computador e componentes, além de possuir outras informações do usuário, tal qual e-mail.
- Objetos Valorados: Objetos de domínio sem identificador.
- Repositórios: Interfaces que se assemelham a coleções para uso no domínio.
- Eventos de Domínio: Eventos que informam serviços quando uma condição ocorre.
-
Aplicação:
- Gerenciador de Requisições: responsável por gerenciar as comunicações da API.
- Orquestrador de Scraping: é responsável por gerenciar requisições, respostas e contornar medidas antirobô.
- Motor de Busca: é responsável por retornar os componentes que mais se adequam aos parâmetros informados pelo usuário.
- Motor de Montagem: é responsável por retornar a melhor combinação de componentes que estão dentro dos parâmetros informados pelo usuário, orçamento e perfil.
- Gerenciador de Usuários: é responsável por manter a sessão do usuário, bem como suas informações.
- Gerenciador de Favoritos: é responsável por garantir com que o usuário consiga marcar um ou um conjunto de componentes como favorito, sendo avisado quando ocorrem dois tipos de eventos, redução de preço e disponibilidade.
- Gerenciador de Notificações: é responsável por emitir notificações eventos em componentes monitorados pelos usuários.
- Administração: é responsável por permitir com que um administrador gerenciar as informações fixos dos componentes.
- DTOs: Interface de troca de dados entre Domínio e Apresentação.
- UOWs: Transações que representam casos de uso.
-
Infraestrutura:
- Adaptador de E-mail: responsável por dar suporte ao envio de e-mails para o módulo de notificações.
- Adaptador de Banco de Dados: responsável por dar suporte aos acessos ao banco de dados para os demais subsistemas.
- Adaptador Web: suporte à conexão com web e sistemas de arquivos.
-
Apresentação:
- Visão Web: relacionado ao React, de geração de interface e requisições.
- API HTTP: interface de acesso por meio de requisições HTTP para os dados de componentes.
O padrão Builder permite fragmentar a construção de um objeto, de forma que o desenvolvedor não seja obrigado a definir todos os atributos deste utilizando o construtor, de modo a não depender da ordem em que estas propriedades são atribuídas. Irá ser utilizado na montagem dos computadores.
O padrão Factory Method fornece uma interface de criação de objetos por uma superclasse, permitindo extensão por herança. Este padrão irá ser utilizado para a instanciação de scrapers específicos para cada loja na qual será realizada a rapagem de dados.
O padrão Observer possibilita implatação de um mecanismo de assinatura capaz de avisar aos assinantes sobre quaisquer eventos que ocorrem no objeto que está sendo observado. Será utilizado para notificar o usuário quando algum componente de sua lista de favoritos sofrer uma redução de preço ou entrar em estoque.
A implantação foi dividida em três nós, o nó Cliente, com o qual o usuário interage diretamente, e que se comunica com a API via HTTP, enquanto esta o responde também via HTTP. Por sua vez, o nó Servidor de Aplicação comunica-se com o Servidor de Banco de Dados via TCP\IP.
Área de implantação | Tecnologia | Linguagem |
---|---|---|
Cliente | React | JavaScript |
Web scraper | BeautifulSoup4 | Python |
Requisições HTTP | Flask | Python |
Base de dados | MariaDB | SQL |
Finalidade | Ferramenta |
---|---|
IDE | Neovim |
IDE | VS Code |
Teste | Postman |