# data[].attributes.body
Cada aluno deverá explicar para seus colegas de grupo o padrão sob sua responsabilidade.

Após as apresentações, o grupo deverá elaborar um quadro comparativo entre os padrões da categoria destacando:

o problema que ele resolve

requisitos de arquitetura (ex. atributos de qualidade) que esse padrão foca

os trade-offs do padrão

Discutir no grupo e fazer um resumo de possíveis situações onde cada padrão poderia ser útil.

# data[].attributes.headline
Lista de participantes com Num USP e nome

# data[].attributes.subject
Lista de participantes com Num USP e nome

# data[].attributes.body
Alexandre Lima Palles Rocha 11797038

Augusto Lescura Pinto 10677290

Rafael Jun Morita 10845040

Aruan Bretas de Oliveira Filho 12609731

# data[].attributes.body
Alto acoplamento

Dificuldade de testar

Mistura de responsabilidades

Dificuldade de Mudança

Vendor lock-in

Degradação do código

# data[].attributes.body
Separação do núcleo da aplicação de dependências externas;

facilitar a substituição de componentes sem afetar a lógica central;

Facilitar os testes devido ao isolamento da logica de negocios de dependencias externas

# data[].attributes.body
Modularidade

Testabilidade

Manutenibilidade

Flexibilidade

Reusabilidade

# data[].attributes.body
Manutenibilidade

Modularidade

Flexibilidade

Reutilização

Separação de responsabilidades

# data[].attributes.body
Aumento da complexidade inicial;

Curva de aprendizado necessária;

Sobrecarga em projetos simples.

# data[].attributes.body
Maior complexidade inicial

Mais código

Desenvolvimento inicial mais lento

Possível excesso de abstração

Exige disciplina da equipe

Curva de aprendizado maior

Leve impacto na performance

# data[].attributes.body
A arquitetura multicamadas é uma das mais difundidas e implementadas, pois define diferentes camadas em um sistema. Essas camadas podem variar em quantidade, podendo também possuir subníveis associados.

Neste padrão, encontra-se no "alto nível" camadas de interface gráfica e interação com o usuário. É comum encontrar também camadas lógicas/aplicação onde as regras de negócio e RNFs são garantidos. E por fim, tem-se a camada de dados, onde o servidor lida com os dados que alimentam o sistema como um todo.

Esse padrão agrega manutenibilidade, modularidade, facilidade de teste e capacidade de reuso de código em outras aplicações.

Em termos de tradeoff, pode tornar o projeto complexo, exigindo um conhecimento técnico da equipe envolvida para assegurar que alterações não causem erros de comunicação entre as camadas. Além disso, o excesso de camadas pode ocasionar em perda de performance

# data[].attributes.body
Para os problemas que são resolvidos, nota-se que todos os três possuem características parecidas, por exemplo, em facilitar os testes do sistema, uma maior separação e isolamento do núcleo e garantir a integridade e segurança do sistema.

No quesito dos requisitos, todos tem grande enfoque na modularidade, flexibilidade, manutenibilidade, testabilidade e reusabilidade.

No ambito dos trade-offs, os três mostram um aumento na complexidade inicial, uma necessidade maior de compreensão da logica do sistema e uma curva de aprendizado maior.

# data[].attributes.body
No caso do Multilayer, ele é muito utilizado em e-commerce, sistemas corporativos ERP's

Já o Hexagonal Arquitecture, é bastante utiizado em TDD's, aplicações de longa vida útil, sistemas de e-commerce, CRM's.

O Clean Arquitecture é bastante utilizado em sistemas bancários, back-ends de grande escala, por exemplo, Netflix e Amazon.