1. Um dos padrões mais conhecidos. A ideia é dividir o software em "camadas", onde cada camada tem uma certa responsabilidade e fornece um serviço para uma camada superior.
1.1. VANTAGENS: Grande familiaridade por parte dos desenvolvedores, fácil de escrever um aplicativo bem organizado.
1.2. DESVANTAGENS: Tende a levar aplicações monolíticas.
1.3. IDEAL: Para para aplicativos de linha de negócios padrão, que fazem mais do que apenas operações CRUD.
2. Em Camadas
3. CQRS
3.1. É conseguir separar as operações de leitura e gravação em bancos de dados, ou seja, uma parte da aplicação só faz consulta e outra parte só faz escrita.
3.1.1. •VANTAGENS: Os modelos de consulta podem se concentrar na lógica e validação dos negócios, enquanto os modelos de leituras podem ser personalizados para cenários específicos de dados; •Pode evitar consultas complexas; •Ganha escalabilidade e disponibilidade. Se um dos bancos de leitura sair do ar, você tem outros, assim, mais difícil de perder tudo, pois tem várias máquinas diferentes com dados replicados.
3.1.2. DESVANTAGENS: Complexidade e dificuldade na sincronização das bases de escrita e leitura.
3.1.3. IDEAL: É bom para aplicações que tem mais leitura do que escrita e é bom também para aplicativos com domínios complexos.
4. Arquitetura Híbrida: é quando se usa mais de uma arquitetura de software num mesmo software.
5. Conjunto de estruturas necessárias para raciocinar sobre o sistema, que compreende elementos de software, as relações entre eles e as propriedades de ambos.
6. Micro Núcleo
6.1. O sistema Microkernel vai conectando plug-ins, é ele quem controla a entrada e saída de dados. Ele não sabe exatamente como funciona o plug-in, mas ele sabe mandar e receber dados para o plug-in.
6.1.1. VANTAGENS: • Fornece grande flexibilidade e extensibilidade, podendo adaptar o seu aplicativo central pra textos diferentes de forma muito fácil. • Também permitem adicionar plug-ins enquanto o app roda e podem ser desenvolvidos por equipes separadas.
6.1.2. DESVANTAGENS: É difícil decidir o que faz parte de micro núcleo e o que não faz, o que fica fora pode acabar crescendo muito, e ele precisa apenas de responsabilidades básicas e permitir acoplar outros pedaços de forma fácil.
6.1.3. IDEAL: • Para aplicativos que pegam dados de diferentes fontes, transformam esses dados e os gravam em destinos diferentes; • Aplicativos de workflow; • Aplicativos de agendamento de tarefas e trabalhos.
7. Microservices
7.1. Cada microservice tem uma responsabilidade única, bem distinta e é desenvolvido de forma independente. Você constrói vários microservices e a dependência entre eles é a comunicação
7.1.1. •VANTAGENS: É possível gravar, manter e implementar cada microservice separadamente, com várias equipes distintas trabalhando em microservices; •Uma arquitetura de microservice deve ser mais fácil de dimensionar; •Não há necessidade de escalar as partes menos usadas do aplicativo; •É mais fácil reescrever partes do aplicativo, pois elas são menores e menos acopladas a outras partes.
7.1.2. •DESVANTAGENS: Muito difícil debugar os microservices e possui preocupações extras como: comunicação, coordenação, compatibilidade, registro log etc... •Mais difícil de testar, porque um depende do outro; •Uma única ação do usuário pode passar por vários microservices; •Há pontos de falhas e quando algo dá errado, pode levar mais tempo pra identificar o problema, porque um microservice está dentro do outro.
7.1.3. •IDEAL: Aplicações em que determinadas partes serão usadas intensivamente e uns precisam ser escalados e outros não, pelo uso que ocorre em cada cada parte da aplicação; •Serviços podem funcionar para mais de uma aplicação ou aplicativos e facilita integração entre aplicações; •Aplicações que seriem muito complexas se fossem em monólito; •É fácil definir o papel de cada aplicação, para desacoplar ela é legal usar microservices.