Arquitetura completa de software Do desenvolvimento à maestria

Gustavo Brandão

*Você terá acesso às futuras atualizações do livro.

Sobre o livro

Aprender a programar já é, por si só, um grande desafio. No entanto, ir além da codificação - desenvolvendo uma visão crítica e a capacidade de propor arquiteturas completas que atendam às necessidades de um cliente - é um passo ainda mais exigente na trajetória de um profissional de software.

Este livro foi criado justamente para tornar esse caminho mais acessível. A proposta é apresentar, em uma ordem didática e progressiva, os principais conceitos de Arquitetura de Software, mostrando como aplicá-los na prática por meio de um projeto realista com a temática de venda de ingressos.

O conteúdo é especialmente útil para profissionais que:

* Atuam como desenvolvedores em times liderados por Arquitetos ou Líderes Técnicos;

* Estão habituados a receber histórias de usuário e transformá-las diretamente em código;

* Sentem falta de uma visão mais ampla da estrutura e das etapas de um projeto;

* Desejam adquirir conhecimentos que impulsionem sua evolução na carreira.

Se você se viu em uma ou mais dessas situações, este livro é para você.

Ao longo da leitura, você terá a oportunidade de consolidar conhecimentos técnicos essenciais, fortalecer suas hard skills e desenvolver soft skills importantes para quem deseja assumir papéis de liderança, formar novos profissionais e conduzir projetos de maior complexidade.

Como o livro está organizado

Neste livro, você será guiado(a) pela definição e desenvolvimento de todo o ecossistema necessário para um sistema de venda de ingressos, com base em uma lista clara de funcionalidades e requisitos.

Do ponto de vista do consumidor, o sistema deve permitir:

* a seleção de ingressos,

* a finalização da compra,

* e o pagamento pelas formas mais comuns: cartão de crédito, boleto, Pix, entre outras.

Já sob a ótica do gestor, o sistema deve possibilitar:

* o gerenciamento dos ingressos,

* e o controle dos pagamentos realizados.

Para estruturar esse processo de forma didática e progressiva, o livro está dividido em cinco temas principais:

* Fundamentos e boas práticas para Arquitetura de Software.

* Aplicando Arquitetura no sistema para venda de ingressos.

* Padrões avançados em Arquitetura.

* Autenticação e autorização.

* Apêndices.

A seguir, apresentamos o conteúdo de cada uma dessas seções em mais detalhes.

Fundamentos e boas práticas para Arquitetura de Software

O foco desta seção é, ao longo de três capítulos, apresentar uma base de conhecimento com conceitos essenciais para fundamentar definições robustas em Arquitetura de Software.

Capítulo 1 - Clean Code e SOLID: conceitos e práticas voltados à escrita clara e à boa organização do código.

Capítulo 2 - Padrões arquiteturais de código: a partir do momento em que aprendemos a escrever um bom código, como organizamos a arquitetura de toda a aplicação? O foco deste capítulo é responder a essa pergunta, abordando padrões arquiteturais, como: DDD (Domain Driven Design), Arquitetura em Camadas (Layered Architecture), Arquitetura Hexagonal (Ports and Adapters), Arquitetura Limpa (Clean Architecture), além de conceitos complementares relacionados.

Capítulo 3 - Padrões de APIs (The Glory Of REST): saber expor eficientemente as interfaces externas da aplicação é fundamental para uma boa arquitetura. A proposta trazida pelo processo definido em The Glory of REST contribui para esse objetivo.

Aplicando Arquitetura no sistema para venda de ingressos

Nesta seção, vamos aplicar os conceitos aprendidos, desde a concepção inicial - quando um stakeholder apresenta uma necessidade ao time - até a modelagem e o desenvolvimento de um sistema para a Gestão de Eventos e Vendas de Ingressos, similar a plataformas amplamente conhecidas de compra de ingressos. O objetivo é compreender, na prática, como os fundamentos estudados podem ser aplicados em uma aplicação de grande porte, enfrentando desafios reais do dia a dia nas empresas. Esta parte está dividida em:

Capítulo 4 - Derivando requisitos em modelos: a partir de uma demanda trazida por stakeholders de negócio, levantaremos os requisitos e, com o apoio do Domain-Driven Design (DDD), iremos derivá-los em um modelo que servirá de base para as definições arquiteturais necessárias ao início do desenvolvimento. Neste capítulo, você terá a oportunidade de compreender como o DDD pode ser valioso para reduzir a complexidade associada a um conjunto amplo de requisitos, fragmentando-os em partes menores. Além disso, verá como aplicar o DDD de forma prática e estratégica.

Capítulo 5 - Arquitetura de microsserviços e derivação do modelo: vamos entender o que são Microsserviços, quais suas vantagens, pontos de atenção e como um modelo criado com o DDD pode ajudar a definir a Arquitetura de Microsserviços para o projeto.

Capítulo 6 - Gestão e listagem de eventos: com o modelo DDD e a Arquitetura de Microsserviços definidos, detalharemos como as implementações devem ser criadas. Será utilizado Java com o framework Spring Boot. Ao longo do caminho, veremos como o ecossistema do Spring, em um alto nível de maturidade, já segue, por si só, muitos dos padrões propostos tanto pela Clean Architecture quanto, principalmente, pelos princípios SOLID. Observaremos como uma arquitetura com o domínio de negócio isolado dos detalhes de implementação - conforme proposto pelo DIP (Dependency Inversion Principle) e pela Clean Architecture - pode acelerar o desenvolvimento e proporcionar uma Pirâmide de Testes mais eficaz e assertiva.

Capítulo 7 - Reserva do pedido: avançaremos na implementação do sistema para a Gestão de Eventos e Vendas de Ingressos e detalharemos o padrão BFF (Backend For Frontend). Vamos explorar considerações adicionais sobre segurança ao adotar esse tipo de padrão (como o CORS - Cross Origin Resource Sharing, entre outros).

Padrões avançados em Arquitetura

Aqui, abordaremos tópicos avançados de Arquitetura, aplicando-os ao sistema para a gestão de eventos e vendas de ingressos, a saber:

Capítulo 8 - Docker e Docker Compose: vamos entender em detalhes o funcionamento e o motivo pelo qual Docker e Docker Compose são tão populares no desenvolvimento de software.

Capítulo 9 - Arquitetura Orientada a Eventos (EDA) com Apache Kafka: vamos entender o que é a Event Driven Architecture (EDA) e como aplicá-la de maneira prática com o Apache Kafka.

Capítulo 10 - Checkout do pedido: aplicação dos conceitos no sistema para a gestão de eventos e vendas de ingressos. Vamos explicar os padrões de segurança (criptografia em trânsito e criptografia em repouso) necessários para lidar com fluxos de pagamentos.

Capítulo 11 - Pagamento do pedido: EDA para desacoplamento do pagamento do pedido ao restante do sistema. Abordaremos boas práticas para implementação deste tipo de fluxo, simulando a integração com um gateway externo de pagamento.

Autenticação e autorização

Em aplicações que serão públicas, ou seja, expostas na internet, algumas questões podem surgir:

1. Como podemos garantir que somente um usuário administrador poderá cadastrar um novo ingresso?

2. Como garantir que os microsserviços da jornada de usuário (aquele que compra ingressos) e da jornada de administrador (aquele que faz a gestão), uma vez expostos, sejam acessados por quem realmente deve?

3. Como saber qual usuário comprou um ingresso?

4. Como garantir que o usuário terá acesso a listagem apenas dos seus ingressos?

5. Como controlar e validar o tempo da sessão de um usuário?

Para responder essas e outras questões, entram em cena os conceitos de autenticação e autorização, que serão trabalhados nos capítulos finais:

Capítulo 12 - Autenticação e autorização com Keycloak: vamos desmembrar os conceitos de autenticação e autorização, utilizando o protocolo OAuth e entender como aplicá-lo com o Keycloak, uma das mais famosas e poderosas ferramentas para implementação de Autenticação e Autorização.

Capítulo 13 - Administração de eventos: no sistema para a gestão de eventos e vendas de ingressos, vamos criar a jornada administrativa com OAuth e Keycloak e, também, aplicar OAuth na jornada de compra.

Apêndices

Nesta parte, trago um fechamento abordando observabilidade de aplicações (Observability) e Kubernetes juntamente aos próximos passos:

Capítulo 14 - Observability, Kubernetes e próximos passos: vamos entender como monitorar e obter uma visão unificada do funcionamento do sistema em ambiente produtivo e como um poderoso orquestrador de containers como o Kubernetes possui vantagens em relação ao Docker Compose para ambientes produtivos. Ao final, abordarei alguns próximos passos para continuidade dos estudos.

Capítulo 15 - Referências: este capítulo reúne todas as fontes bibliográficas e recursos que fundamentaram o conteúdo do livro. Inclui livros essenciais sobre arquitetura de software, artigos relevantes, descrições dos principais padrões e princípios abordados (SOLID, Clean Code, padrões arquiteturais e REST), além de listar as ferramentas e tecnologias utilizadas nos projetos práticos. Também disponibiliza links para o repositório GitHub com todos os códigos-fonte e projetos completos, bem como recursos adicionais para aprofundamento nos temas discutidos ao longo da obra.

Projetos desenvolvidos

Todos os códigos dos projetos desenvolvidos no decorrer do livro estão disponíveis no GitHub. Use este repositório como base de consulta e apoio para o desenvolvimento dos projetos: https://github.com/gbrandao07/livro-arquitetura-de-software-projects.

O projeto finalizado do sistema para a gestão de eventos e vendas de ingressos encontra-se na pasta "projeto-completo" e nela há orientações de como subi-lo localmente.

Como ler o livro

Este livro foi pensado para apresentar conceitos de forma clara e, principalmente, para colocá-los em prática por meio da implementação de projetos.

Você pode escolher entre duas formas de leitura, conforme seu estilo de aprendizado:

1. Leitura prática desde o início: Ler cada capítulo e, logo em seguida, colocar os conceitos em prática implementando os projetos à medida que os temas são abordados.

2. Leitura exploratória primeiro: Ler todo o conteúdo de forma contínua para ter uma visão geral, e depois retornar aos capítulos à medida que for aplicando os conceitos na prática.

Independentemente da abordagem escolhida, a recomendação essencial para consolidar o aprendizado é: implemente os projetos. A prática é o que realmente vai fixar os conceitos e desenvolver suas habilidades.

Então, pronto(a) para embarcar nessa jornada comigo?

Sobre o autor

Meu nome é Gustavo Luca Brandão e atuo na área de Tecnologia da Informação (TI), com foco em desenvolvimento e Arquitetura de Software, há mais de 12 anos. Ao longo dessa trajetória, vivenciei diversos desafios e contextos, participei de projetos em diferentes estágios de maturidade e tive a oportunidade de trabalhar com profissionais de perfis variados. Também acompanhei de perto a evolução das tecnologias e dos processos de desenvolvimento nesse período.

Atualmente, lidero times compostos por profissionais em diferentes momentos de carreira, contribuindo principalmente com a definição de arquiteturas completas de solução, abrangendo todo o ecossistema Java, tecnologias de frontend e cloud.

Sou apaixonado por ensinar e transmitir conhecimento. Sempre que possível, escrevo artigos, faço treinamentos e já palestrei no TDC (The Developer's Conference), em São Paulo. Agora, como fruto dessa paixão, venho apresentar este livro.

Meu objetivo é que você, desenvolvedor(a) Java, possa adquirir - de maneira prática e aplicada - conhecimentos valiosos de arquitetura e assim dar um passo importante rumo à evolução da sua carreira.

Sumário

  • 1 Clean Code e SOLID
    • 1.1 Conhecendo o Clean Code e seus princípios
    • 1.2 SOLID
    • 1.3 O que aprendemos neste capítulo?
  • 2 Padrões arquiteturais de código
    • 2.1 Panorama geral das arquiteturas
    • 2.2 Coesão e acoplamento
    • 2.3 Arquitetura em Camadas (Layered Architecture)
    • 2.4 Arquitetura Hexagonal (Ports and Adapters)
    • 2.5 Arquitetura Limpa (Clean Architecture)
    • 2.6 Domain Driven Design (DDD)
    • 2.7 Testes de arquitetura
    • 2.8 O que aprendemos neste capítulo?
  • 3 Padrões de APIs (The Glory Of REST)
    • 3.1 Nível 0 (Level 0)
    • 3.2 Nível 1 (Level 1)
    • 3.3 Nível 2 (Level 2)
    • 3.4 Nível 3 (Level 3)
    • 3.5 O que aprendemos neste capítulo?
  • 4 Derivando requisitos em modelos
    • 4.1 Identificando entidades e relacionamentos através da linguagem onipresente do DDD
    • 4.2 Expandindo o modelo com DDD
    • 4.3 Definição dos Agregados
    • 4.4 O que aprendemos neste capítulo?
  • 5 Arquitetura de microsserviços e derivação do modelo
    • 5.1 Microsserviços: histórico, definição e prática
    • 5.2 Derivação do modelo
    • 5.3 Identificação dos fluxos sistêmicos
    • 5.4 O que aprendemos neste capítulo?
  • 6 Gestão e listagem de eventos
    • 6.1 Implementando o microsserviço event-service
    • 6.2 Implementando o microsserviço room-service
    • 6.3 Implementando o microsserviço ticket-service
    • 6.4 O que aprendemos neste capítulo?
  • 7 Reserva do pedido
    • 7.1 Implementando o microsserviço order-service
    • 7.2 Entendendo o CORS (Cross-Origin Resource Sharing)
    • 7.3 Implementando o microsserviço customer-service
    • 7.4 O que aprendemos neste capítulo?
  • 8 Docker e Docker Compose
    • 8.1 Máquinas virtuais e containers
    • 8.2 Docker
    • 8.3 Docker Compose
    • 8.4 Exercitando Docker e Docker Compose com uma aplicação prática
    • 8.5 O que aprendemos neste capítulo?
  • 9 Arquitetura Orientada a Eventos (EDA) com Apache Kafka
    • 9.1 Componentes da EDA
    • 9.2 Vantagens e desafios da EDA
    • 9.3 Padrões de EDA
    • 9.4 Apache Kafka
    • 9.5 Componentes do Apache Kafka
    • 9.6 Fluxo de ponta a ponta da EDA com Apache Kafka
    • 9.7 Instalação e execução do Apache Kafka
    • 9.8 Apache Kafka com Spring Boot
    • 9.9 O que aprendemos neste capítulo?
  • 10 Checkout do pedido
    • 10.1 Implementando o microsserviço payment-service
    • 10.2 Criptografia de dados com AES (Advanced Encryption Standard)
    • 10.3 Aplicando criptografia na implementação do adapter
    • 10.4 Implementando o adapter para requisição do pagamento
    • 10.5 Ainda sobre segurança
    • 10.6 O que aprendemos neste capítulo?
  • 11 Pagamento do pedido
    • 11.1 Consumindo a mensagem de solicitação de pagamento
    • 11.2 Criação do pedido
    • 11.3 Processamento do pagamento em sistema externo
    • 11.4 Atualização do estado do pedido
    • 11.5 O que aprendemos neste capítulo?
  • 12 Autenticação e autorização com Keycloak
    • 12.1 Protocolo OAuth
    • 12.2 Aplicando OAuth com Keycloak
    • 12.3 Frontend com Keycloak
    • 12.4 Backend com Keycloak
    • 12.5 Conhecimentos avançados em OAuth
    • 12.6 O que aprendemos neste capítulo?
  • 13 Administração de eventos
    • 13.1 Implementando o microsserviço admin-service
    • 13.2 Configurando autenticação e autorização no customer-service
    • 13.3 Considerações sobre segurança
    • 13.4 O que aprendemos neste capítulo?
  • 14 Observability, Kubernetes e próximos passos
    • 14.1 Observability
    • 14.2 Kubernetes
    • 14.3 O que aprendemos neste livro?
    • 14.4 Próximos passos
  • 15 Referências bibliográficas

Dados do produto

Número de páginas:
431
ISBN:
978-85-5519-418-4
Data publicação:
01/2026

Compartilhe!

Compartilhe no Facebook Compartilhe no Twitter

*Você terá acesso às futuras atualizações do livro.