AndreCoutinhom / software_design_and_architecture

Escrever o código de um software que deve atender as necessidades de negócios de uma organização é uma tarefa complexa. São milhares de linhas de código que precisam ser simples e entender e manter, permitindo que o software seja facilmente adaptado às mudanças que surgem com o tempo.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Anotações da Formação em Engenharia de Software da Alura.

Design e Arquitetura

image

Escrever o código de um software que deve atender as necessidades de negócios de uma organização é uma tarefa complexa. São milhares de linhas de código que precisam ser simples de entender e manter, permitindo que o software seja facilmente adaptado às mudanças que surgem com o tempo.

Justamente por isso é essencial que o time de desenvolvimento projete uma arquitetura de software que seja simples de manter e evoluir, assim como o design do código escrito que precisa seguir padrões que garantam tais carascterísticas.

Design de Código vs Arquitetura de Software

A principal diferença entre design de código e arquitetura de software está em seus diferentes níveis de padrão.

Enquanto Design de Código é focado no posicionamento e sintaxe do código em si, a Arquitetura de Software se trata do conhecimento de alto padrão sobre a organização e funcionamento esquemático de todos os componentes do software.

Arquitetura Hexagonal

O que deve ser feito?:

  • Definier quais componentes criar.
  • Como os componentes serão organizados na aplicação.

Padrão Ports and Adapters

image

O que significa?

A ideia é construir sistemas que favorecem reusabilidade de código, alta coesão, baixo acoplamento, independência de tecnologia e que são mais fáceis de serem testados.

  • Primary Adapters são receptores de dados.
  • Secondary Adapters são displays desses dados.

Foco na modelagem de software para corresponder a um domínio de acordo com as informações dos especialistas desse domínio.

Clean Architecture

MVC (Model View Controller)

image

  • O MVC é uma forma de organizar a aplicação web, mas ainda é necessário definir cada campo.

Clean Architecture

image

  • Uma entidade é um tipo de classe que possui alguma identidade. Onde ficam as regras do negócio.
  • Use cases são classes que organizam o fluxo das regras de negócio.
  • A camada de adaptadores transfere dados externos para o sistema.
  • A última camada é totalmente ligada à infraestrutura do negócio que interage com o usuário.

O ideal de uma arquitetura limpa é manter algumas camadas não dependentes da infraestrutura. Por exemplo, a última camada pode envolver mudanças na linguagem de programação ou na estrutura do banco de dados, mas as regras do negócio permaneceriam as mesmas.

Domain-Driven Design

Padrões estratégicos

  • Linguagem Ubíqua (onipresente)
  • Contextos delimitados
  • Domínio e Subdomínio (o que define o núcleo do funcionamento da empresa?)

Padrões táticos

  • Entidades
  • Repositórios
  • Eventos
  • Módulos
  • Serviços

DDD está mais para uma filosofia de produção

image

Mensageria

image

  • É uma conduta de envio de mensagens assíncronas.
  • Nessa conduta é possível que mensagens de aviso sejam enviadas sem que o processo de construção seja interrompido.

Exemplo em código:

image

Modelagem de eventos

  • Consolidado por Adam Dymitruk

Fases

  • Brainstorming;
  • Ordenação lógica (the plot);

image

  • Storyboard;
  • Identificando entradas;
  • Identificando saídas;
  • Lei de conway;

Separação lógica dos eventos referente à estrutura empresarial (quem faz o quê)

  • Elaboração de cenários.

Arquitetura orientada a eventos

Escabilidades

Formas de adequar o serviço diante de aumento de complexidade

  • Horizontal;

Busca soluções adicionando o número de serviços e tecnologias para a aplicação.

  • Vertical;

Busca soluções envolvendo o aumento quantitativo de recursos de produção (hardware)

  • Profundidade

Busca soluções em forma de mudanças relacionadas ao cenário e ao público foco. Geralmente aplicado como inovação.

Event Bus

  • Sistema baseado em comunicação de eventos por mensageria.

image

Event sourcing

  • Sistema baseado em implementações de evento (controle de versão)

About

Escrever o código de um software que deve atender as necessidades de negócios de uma organização é uma tarefa complexa. São milhares de linhas de código que precisam ser simples e entender e manter, permitindo que o software seja facilmente adaptado às mudanças que surgem com o tempo.