Anotações da Formação em Engenharia de Software da Alura.
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.
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.
- Definier quais componentes criar.
- Como os componentes serão organizados na aplicação.
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.
- O MVC é uma forma de organizar a aplicação web, mas ainda é necessário definir cada campo.
- 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.
- Linguagem Ubíqua (onipresente)
- Contextos delimitados
- Domínio e Subdomínio (o que define o núcleo do funcionamento da empresa?)
- Entidades
- Repositórios
- Eventos
- Módulos
- Serviços
DDD está mais para uma filosofia de produção
- É 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:
- Consolidado por Adam Dymitruk
- Brainstorming;
- Ordenação lógica (the plot);
- 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.
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.
- Sistema baseado em comunicação de eventos por mensageria.
- Sistema baseado em implementações de evento (controle de versão)