Skip to content

Arquitetura

Delphino Luciani edited this page Oct 31, 2024 · 5 revisions

Visão Geral

A organização geral será baseada na arquitetura em camadas e será dividida em módulos funcionais que integram-se em um fluxo lógico: Frontend: Exibição e interação com o usuário. Backend/Servidor de Aplicação: Processamento de lógica de negócios, comunicação entre serviços e gerenciamento de dados. Banco de Dados: Armazenamento e recuperação de dados. Serviço de Notificação e Mensageria: Gerenciamento de eventos em tempo real e notificações assíncronas. tiers3

Cada módulo será mapeado em subsistemas específicos, conforme descrito a seguir.

Detalhamento dos módulos

  1. Módulo de Frontend Descrição: Este módulo será responsável pela interface com o usuário, exibindo informações e recebendo entradas. Frameworks e Bibliotecas: React ou Vue.js para desenvolvimento de SPA (Single Page Application) com Axios para requisições HTTP. Bootstrap ou Material UI para uma interface responsiva e acessível. Componentes: AgendaComponent: Exibe lista de eventos com filtragem (RF03, RF04). EventDetailComponent: Exibe detalhes de eventos selecionados (RF05). CalendarComponent: Exibe o calendário mensal com os eventos marcados (RF06). ChatComponent: Interface para bate-papo (RF07).

Padrões de Design: Facade para organizar chamadas de API do frontend para o backend, ocultando a complexidade das requisições.

  1. Módulo de Backend/Servidor de Aplicação Descrição: Este módulo centraliza a lógica de negócios e a comunicação com o banco de dados e serviços de notificação. Tecnologia: Node.js com Express ou Python com Django. Funcionalidades: EventService: Gerencia operações de criação, edição e exclusão de eventos (RF01, RF02). NotificationService: Gera notificações para novos eventos e alterações (RF09). ChatService: Gerencia mensagens no bate-papo (RF07). Bibliotecas: JWT para autenticação, Nodemailer para envio de e-mails, Socket.io para WebSocket no chat.

Padrões de Design: Singleton para serviços que requerem instância única, como o NotificationService. Factory para a criação de eventos e mensagens de notificação, facilitando a extensão para novos tipos.

  1. Módulo de Banco de Dados Descrição: Armazenamento e gerenciamento dos dados, garantindo integridade e disponibilidade. Tecnologia: PostgreSQL para um banco de dados relacional, adequado para armazenar informações estruturadas sobre eventos e usuários. Entidades: Evento: Representa cada evento (RF01), incluindo atributos como título, data, local, etc. Usuário: Armazena informações de autenticação e permissões. Comentário: Registra os comentários associados aos eventos (RF08). Padrões: Repository para a camada de persistência, facilitando operações CRUD desacopladas do serviço.

  2. Módulo de Serviço de Notificação e Mensageria Descrição: Gerencia a comunicação em tempo real e o envio de notificações. Tecnologia: Firebase Cloud Messaging (para notificações de push), RabbitMQ (para filas de mensagens), WebSockets com Socket.io (para chat em tempo real). Funcionalidades: EventNotifier: Envia notificações sobre novos eventos ou alterações (RF09). MessageQueue: Armazena mensagens do chat para serem enviadas de forma assíncrona (RF07).

Padrões de Design: Observer para gerenciar assinaturas de eventos e disparar notificações.

Diagramas

Diagrama de Classes (Exemplo: Módulo de Eventos)

O diagrama de classes incluirá:

Classe Evento: Contém informações do evento e métodos para CRUD. Classe Comentário: Associada a eventos, permitindo adição de comentários. Classe Notificação: Gera mensagens para o módulo de notificações. diagramadeclasses_agendatech-Page-1 drawio

Diagrama de Sequência (Exemplo: Cadastro de Evento)

O usuário envia uma solicitação de cadastro via AgendaComponent. O Controller valida e aciona o EventService. EventService cria a entrada no banco via EventRepository. NotificationService é acionado para criar notificação de novo evento.

Diagrama de Implantação

Servidor de Aplicação: Hospeda o backend com Django. Servidor de Banco de Dados: Hospeda PostgreSQL. Frontend SPA: Servido via CDN ou servidor web. Serviços de Notificação e Mensageria: Distribuídos para lidar com notificações (via Firebase ou RabbitMQ) e chat em tempo real (Socket.io).

diagramadeclasses_agendatech-Página-2 drawio

Definição Tecnológica

Frontend: React ou Vue.js para interface interativa e modular, com Axios para comunicação com o backend.

Backend: Django (Python), escolhido pela robustez no gerenciamento de APIs REST e tempo de resposta.

Banco de Dados: PostgreSQL devido à necessidade de estrutura relacional dos eventos e usuários.

Mensageria e Notificações: Firebase Cloud Messaging para notificações push, RabbitMQ para filas de mensagens assíncronas e Socket.io para chat em tempo real.