Prévia do material em texto
Aluno: André Tavares N. Miranda Desenvolvimento de uma Arquitetura de Sistemas Robusta e Escalável Escopo: 1.Descrição da Arquitetura de Sistemas: A arquitetura de sistemas é a espinha dorsal de qualquer sistema de software, fornecendo a base para o desenvolvimento, implantação e evolução de soluções de tecnologia. Ela define a estrutura, os componentes e as interações de um sistema, garantindo que ele atenda aos requisitos de negócios e técnicos. 1.2 Princípios Modularidade: dividir o sistema em módulos independentes e coesos, que podem ser desenvolvidos, testados e implantados separadamente. Abstração: simplificar a complexidade do sistema, ocultando detalhes desnecessários e expondo apenas as informações relevantes. Reusabilidade: projetar componentes que possam ser reutilizados em diferentes partes do sistema ou em outros sistemas. Escalabilidade: garantir que o sistema possa crescer e lidar com o aumento da carga de trabalho sem comprometer o desempenho. Manutenibilidade: facilitar a manutenção e evolução do sistema, permitindo que as alterações sejam feitas de forma rápida e segura. 1.3 Diretrizes Compreender os requisitos: analisar cuidadosamente os requisitos de negócios, funcionais e não funcionais para garantir que a arquitetura atenda às necessidades dos usuários e stakeholders. Escolher os padrões de arquitetura adequados: selecionar os padrões de arquitetura que melhor se adéquam aos requisitos do sistema, como microsserviços, arquitetura orientada a eventos ou arquitetura em camadas. Definir os componentes e interfaces: identificar os principais componentes do sistema e suas interações, definindo interfaces claras e bem documentadas. 1.4 Arquitetura de Software É a espinha dorsal de qualquer sistema de software. Ela define a estrutura, os componentes e as interações de um sistema, garantindo que ele atenda aos requisitos de negócios e técnicos. Ela permite que cumpramos os princípios citados acima. Níveis da Arquitetura de Software A arquitetura de software pode ser analisada em diferentes níveis, cada um com foco em aspectos específicos do sistema: 1. Arquitetura de Negócios: Descreve a arquitetura do sistema do ponto de vista do negócio, focando em como o sistema suporta os processos de negócios e os objetivos da organização. 2. Arquitetura de Aplicações: Detalha a estrutura e o comportamento das aplicações que compõem o sistema. 3. Arquitetura de Dados: Descreve a estrutura e o gerenciamento dos dados utilizados pelo sistema. 4. Arquitetura de Infraestrutura: Descreve a infraestrutura física e lógica que suporta o sistema. 5. Arquitetura de Implantação: Descreve como o sistema é implantado e executado no ambiente de produção. 1.5 Justificativa das Escolhas Arquiteturais • Microsserviços: promove a escalabilidade e flexibilidade do sistema. Ao dividir o sistema em serviços menores e independentes, é possível escalar cada serviço individualmente, de acordo com suas necessidades específicas. Também facilita a manutenção e evolução do sistema. • CQRS (Command Query Responsibility Segregation): O CQRS otimiza as operações de leitura e escrita no sistema. Isso resulta em melhor desempenho e escalabilidade, especialmente em sistemas com alta demanda de leitura e escrita. • DDD (Domain-Driven Design): O DDD garante que o sistema esteja intimamente alinhado com o negócio. Ao focar no domínio do problema e utilizar uma linguagem ubíqua, o DDD facilita a comunicação. • Padrões de segurança: A implementação de padrões de segurança robustos protege os dados e a comunicação do sistema. Isso inclui medidas como autenticação, autorização, criptografia e proteção contra ataques cibernéticos, garantindo a confidencialidade, integridade e disponibilidade dos dados. 2. Composição de componentes Fundamental na arquitetura de software que permite criar sistemas complexos e robustos, combinando componentes menores e mais simples. Essa abordagem oferece diversas vantagens, como modularidade, reutilização, manutenibilidade e escalabilidade. • Componentes de interface de usuário: Botões, campos de texto, menus etc. • Componentes de software: Serviços, módulos e bibliotecas. • Bibliotecas: Conjuntos de funções e classes reutilizáveis que podem ser incorporadas a diferentes projetos de software. • Frameworks: Estruturas de software que fornecem uma base para o desenvolvimento de aplicações. Exemplos: (Angular, React), frameworks para desenvolvimento mobile (Flutter, React Native). • Serviços: Componentes de software independentes que oferecem funcionalidades específicas para outros componentes ou aplicações. Exemplos: serviços de autenticação, serviços de pagamento, serviços de armazenamento de dados. • APIs (Interfaces de Programação de Aplicações): Conjuntos de regras e especificações que permitem que diferentes componentes ou sistemas se comuniquem e troquem informações. Exemplos: APIs REST, APIs GraphQL. 3. Domain-Driven Design (DDD) O DDD coloca o domínio do negócio no centro do processo de desenvolvimento, promovendo uma profunda compreensão das regras, dos processos e dos conceitos que permeiam a área de atuação do software. 3.1 1) Modelagem do Domínio 2) Entidades: Representam objetos principais do sistema. 3) Objetos de Valor: Representam conceitos imutáveis. 4) Agregados: Estruturas que garantem consistência dos dados. 5) Repositórios: Responsáveis pela persistência e recuperação dos dados. O DDD proporciona: aumentando a compreensão do domínio do negócio; um design mais preciso e coeso; Facilita a manutenção e adaptação do software; melhora a comunicação entre stakeholders; 3.2 Contextos Delimitados Contextos Delimitados é um processo iterativo que envolve a colaboração entre as equipes de desenvolvimento e os especialistas de domínio. Um breve roteiro inclue: • Analise o domínio: Identifique os diferentes subdomínios e as áreas de responsabilidade do negócio. • Identifique os termos: Verifique se existem termos que são usados em diferentes partes do negócio com significados diferentes. • Considere as equipes: Leve em conta a estrutura organizacional e as equipes responsáveis por cada parte do sistema. • Use mapas de contexto: Crie diagramas que representem os diferentes Contextos Delimitados e seus relacionamentos. 3.3 Exemplo para uma loja online. Podemos identificar os seguintes Contextos Delimitados: • Catálogo de produtos: Responsável por gerenciar as informações dos produtos, como nome, descrição, preço e categorias. • Carrinho de compras: Responsável por gerenciar os itens que o cliente adicionou ao carrinho, calcular o valor total e aplicar descontos. • Pagamento: Responsável por processar os pagamentos das compras, utilizando diferentes métodos de pagamento. • Entrega: Responsável por gerenciar o processo de entrega dos produtos, incluindo cálculo do frete, envio e rastreamento. 4. Fase de Projeto (Modelagem) do Sistema Também conhecida como modelagem, é uma etapa crucial no ciclo de vida de desenvolvimento de sistemas (SDLC). Ocorre após a fase de análise de requisitos. Nessa fase, o objetivo principal é transformar os requisitos definidos em um modelo detalhado do sistema, que servirá como base para a construção e implementação. Para o Projeto de componentes podemos utilizar UML, utilizando de diagramas de classe, diagramas de sequência e outros diagramas. Para o Projeto de interface do usuário (UI) Criar protótipos e wireframes da interface do usuário, mostrando a aparência e o comportamento das telas do sistema. Consideração de aspectos como usabilidade, acessibilidade e experiência do usuário (UX). 4.1 Funcionalidades Representam o que o sistema faz, ou seja, as tarefas e serviços que ele oferece aos usuários. Elas são definidas com base nos requisitos do sistema e nas necessidades dos usuários.• Descrição detalhada: Cada funcionalidade é descrita em detalhes, incluindo seus objetivos, entradas, saídas, regras de negócio e restrições. • Interface com o usuário: Define-se como o usuário irá interagir com a funcionalidade, incluindo telas, menus, comandos e outros elementos da interface. • Integração com outros componentes: Especifica-se como a funcionalidade se integra com outros componentes do sistema, incluindo troca de dados, comunicação e dependências. • Casos de uso: Diagramas de casos de uso podem ser utilizados para representar as funcionalidades do sistema e como os usuários interagem com elas. 4.2 Estruturas Internas As estruturas internas são os componentes e mecanismos que possibilitam o funcionamento das funcionalidades. Elas abrangem diversos aspectos do sistema, incluindo: • Arquitetura do sistema: Define-se a estrutura geral do sistema, incluindo seus principais componentes, seus relacionamentos e suas interações. A arquitetura deve ser escalável, confiável, segura e fácil de manter. • Banco de dados: Projeta-se o banco de dados que irá armazenar os dados do sistema, incluindo tabelas, colunas, tipos de dados, relacionamentos e índices. O banco de dados deve ser eficiente, seguro e escalável. • Componentes de software: Detalha-se o projeto de cada componente do sistema, incluindo suas funcionalidades, seus métodos, seus atributos e seus relacionamentos com outros componentes. • Interfaces: Definem-se as interfaces entre os componentes do sistema, incluindo os formatos de dados, os protocolos de comunicação e os mecanismos de interação. • Segurança: Implementam-se mecanismos de segurança para proteger o sistema contra acessos não autorizados, ataques cibernéticos e outras ameaças. • Infraestrutura: Define-se a infraestrutura de hardware e software que irá suportar o sistema, incluindo servidores, redes, sistemas operacionais e outros componentes. 5. Engenharia de Requisitos 5.1 Elicitação de Requisitos: Funcionais Não Funcionais De Negócio Do Usuário 5.2 Técnicas de Modelagem Casos de Uso Histórias de Usuário 6. Projeto da Solução • Desenvolver um plano de implementação detalhado, incluindo as tecnologias, ferramentas e metodologias a serem utilizadas. • Definir os processos de desenvolvimento, teste e implantação do sistema. • Estabelecer métricas de qualidade para monitorar o progresso do projeto e garantir a entrega de um produto de alta qualidade. 7. Reúso de Software • Identificar componentes e bibliotecas existentes que possam ser reutilizados no desenvolvimento do sistema. • Avaliar a adequação e a qualidade dos componentes reutilizáveis, considerando aspectos como compatibilidade, desempenho e segurança. • Adaptar e integrar os componentes reutilizáveis ao sistema, garantindo a sua correta funcionalidade. 8. Padrões de Projeto de Arquitetura de Sistemas • Selecionar e aplicar padrões de projeto de arquitetura adequados para resolver desafios específicos do sistema (ex: MVC, Microsserviços, CQRS). • Documentar os padrões de projeto utilizados, explicando suas vantagens, desvantagens e como foram aplicados no contexto do sistema. 9. Projeto dos Componentes da Arquitetura de Sistemas • Detalhar o design de cada componente, incluindo suas interfaces, funcionalidades, classes e métodos. • Utilizar princípios de design orientado a objetos (ex: SOLID) para criar componentes coesos, de baixo acoplamento e fáceis de manter. • Considerar aspectos como desempenho, escalabilidade, segurança e tratamento de erros durante o projeto dos componentes. 10. Projeto da Interface de uma Arquitetura de Sistemas • Definir as interfaces do sistema, tanto internas (entre os componentes) quanto externas (com outros sistemas ou usuários). • Utilizar princípios de design de interface (ex: RESTful) para criar interfaces claras, consistentes e fáceis de usar. • Documentar as interfaces, incluindo seus métodos, parâmetros, tipos de dados e formatos de mensagens. 11. Arquitetura de Softwares Distribuídos • Projetar a arquitetura do sistema considerando os desafios e oportunidades de um ambiente distribuído. • Utilizar tecnologias e padrões de projeto adequados para garantir a comunicação confiável, a consistência dos dados e a escalabilidade do sistema em um ambiente distribuído. • Considerar aspectos como tolerância a falhas, balanceamento de carga e monitoramento do sistema em um ambiente distribuído Compreender os requisitos: analisar cuidadosamente os requisitos de negócios, funcionais e não funcionais para garantir que a arquitetura atenda às necessidades dos usuários e stakeholders. Escolher os padrões de arquitetura adequados: selecionar os padrões de arquitetura que melhor se adéquam aos requisitos do sistema, como microsserviços, arquitetura orientada a eventos ou arquitetura em camadas. Definir os componentes e interfaces: identificar os principais componentes do sistema e suas interações, definindo interfaces claras e bem documentadas. 1.4 Arquitetura de Software Níveis da Arquitetura de Software 3.3 Exemplo para uma loja online. Podemos identificar os seguintes Contextos Delimitados: 4.1 Funcionalidades 5. Engenharia de Requisitos 5.1 Elicitação de Requisitos: