Slide 1

Slide 1 text

Decisões Arquiteturais: O que se encaixa no meu projeto? Carine Bertagnolli Mônica Ribeiro

Slide 2

Slide 2 text

Martin Fowler Martin Fowler “O termo arquitetura envolve a noção dos principais elementos do sistema, as peças que são difíceis de mudar. Uma fundação na qual o resto precisa ser construído"

Slide 3

Slide 3 text

Agenda Quem somos? 1 Análise: MVC, MVVM, MVP e Arquitetura Hexagonal 2 Perguntas :) 3

Slide 4

Slide 4 text

Carine Bertagnolli Mônica Ribeiro Backend Dev Pleno @ Zup Backend Dev Spec. @ Zup Quem somos nós?

Slide 5

Slide 5 text

1 Separação de responsabilidades Quais pratos equilibrar? 2 Testabilidade 3 Flexibilidade e Extensibilidade 4 Manutenção 5 Aplicabilidade

Slide 6

Slide 6 text

MVC model - view - controller

Slide 7

Slide 7 text

MVC: 1 model view controller lógica de negócios e acesso ao banco gerenciamento de entrada interface do usuário separação de responsabilidades

Slide 8

Slide 8 text

model view controller 1 renderiza request MVC: separação de responsabilidades response banco de dados retorna os eventos Usuário HTTP Response HTTP request

Slide 9

Slide 9 text

2 A separação de responsabilidades ajuda a isolar cada componente para testes unitários; É possível fazer testes de integração entre Model e Controller ignorando a View (mock). Teste de integração com a View, pode ser mais complexo e exigir ferramentas especializadas. Se usar um framework que implementa o padrão MVC, pode gerar dependência, dificultando os testes; MVC: testabilidade 🚨

Slide 10

Slide 10 text

3 Lida bem com mudanças de requisitos? Lida bem com adição de novos recursos? MVC: flexibilidade e extensibilidade Rigidez estrutural pode dificultar a adição de novos recursos.

Slide 11

Slide 11 text

4 MVC: manutenção Facilidade de Manutenção a Longo Prazo Desafios Potenciais: Se não for implementado adequadamente, o MVC pode levar a um aumento no acoplamento entre os componentes, o que tornaria a manutenção mais difícil

Slide 12

Slide 12 text

5 Aplicações web e desktop. Single Pages Applications (SPA). Aplicações mobiles. Não faz muito sentido para aplicações com pouca ou nenhuma UI. MVC: aplicabilidade 🚨 ✅ desacoplar a interface do usuário da lógica de negócios; interações frequentes com a interface do usuário. Quando você precisa:

Slide 13

Slide 13 text

MVP model - view - presenter

Slide 14

Slide 14 text

MVP: 1 model view presenter dados e lógica de negócio coordena apresentar os dados separação de responsabilidades

Slide 15

Slide 15 text

MVP: 1 separação de responsabilidades notifica notifica atualiza atualiza model view presenter

Slide 16

Slide 16 text

2 A separação de responsabilidades ajuda a isolar cada componente para testes unitários; A lógica de apresentação pode ser testada de forma mais eficaz; A View é tratada como interface, logo é mais fácil criar implementações de teste. Teste de integração com a View podem ser necessários para verificar a integração correta entre os componentes. MVP: testabilidade 🚨

Slide 17

Slide 17 text

3 A separação rígida entre Model, View e Presenter torna mais fácil adicionar ou modificar funcionalidades sem afetar outras partes do sistema. Pode ser complexo devido a quantidade de código. MVP: flexibilidade e extensibilidade

Slide 18

Slide 18 text

4 MVP: manutenção Componentes isolados e focados em uma função específica; Separação clara ajuda a localizar e corrigir problemas sem afetar outras partes do sistema. Manutenção de interfaces

Slide 19

Slide 19 text

5 Aplicações web e desktop. Aplicações mobile. Não faz muito sentido para aplicações com pouca ou nenhuma UI. Curva de aprendizado. MVP: aplicabilidade 🚨 ✅ quando a lógica da apresentação for crítica; a testabilidade for uma prioridade; de várias interfaces de usuário. Quando você precisa:

Slide 20

Slide 20 text

MVVM model - view - viewmodel

Slide 21

Slide 21 text

MVVM: 1 model view viewmodel lógica de negócios lógica básica de apresentação lidar com interações chamar métodos corretos da model interface do usuário separação de responsabilidades

Slide 22

Slide 22 text

1 requisita dado formatado ação do usuário responde model view viewmodel MVVM: separação de responsabilidades Data binding Observer pattern

Slide 23

Slide 23 text

2 É possível realizar os testes sem haver interação na interface do usuário? É uma tarefa simples? 🚨 MVVM: testabilidade Planejar cuidadosamente cenários de teste e priorizar os testes que cobrem a lógica de negócios mais crítica.

Slide 24

Slide 24 text

3 Separação de responsabilidades facilita a introdução de melhorias e/ou novos recursos; Facilita o reuso? Cuidar o número de ViewModels Duplicação de código flexibilidade e extensibilidade MVVM: Alterações significativas em UI podem ocasionar alterações de vários ViewModels e Views. 🚨

Slide 25

Slide 25 text

4 manutenção fácil de realizar alterações; fácil identificar e isolar problemas durante a manutenção; Arquitetura foi implementada corretamente e as boas práticas foram seguidas? MVVM:

Slide 26

Slide 26 text

5 Plataformas Xamarin. Windows Presentation Foundation (WPF); Microsoft Silverlight. Quando não implementado corretamente pode causar problemas de desempenho. aplicabilidade 🚨 ✅ quando a lógica da apresentação for crítica; a testabilidade for uma prioridade; de várias interfaces de usuário. Quando você precisa: MVVM:

Slide 27

Slide 27 text

HEXAGONAL “Ports and Adapters”

Slide 28

Slide 28 text

O foco principal é isolar a lógica de negócio do mundo externo, permitindo a fácil substituição de componentes externos.

Slide 29

Slide 29 text

1 cliente HEXAGONAL: separação de responsabilidades Adaptador domínio port port serviço (downstream) serviço (upstream) serviço (upstream) port port Adaptador Adaptador Adaptador

Slide 30

Slide 30 text

2 É possível realizar os testes sem haver interação na interface do usuário? “Permitir que um aplicativo seja igualmente conduzido por usuários, programas, testes automatizados ou scripts em lote, e que seja desenvolvido e testado isoladamente de seus eventuais dispositivos de tempo de execução e bancos de dados.” HEXAGONAL: testabilidade Alistair Cockburn

Slide 31

Slide 31 text

3 Aplicação vai se adaptar as mudanças de tecnologia e UI sem impactar o negócio; Podem ser escolhidas as tecnologias e frameworks que mais se adequam a cada camada; Cuidado com o overhead de código flexibilidade e extensibilidade HEXAGONAL:

Slide 32

Slide 32 text

4 manutenção isolamento de mudanças: cada camada tem responsabilidades bem definidas e podem ser modificada ou atualizada independentemente das outras; reutilização de componentes fácil de realizar manutenção a longo prazo? HEXAGONAL: Requer um planejamento adequado e boas práticas de engenharia de software

Slide 33

Slide 33 text

5 Aplicativos Web e Mobile; Aplicativos IoT. Em projetos de pequena escala ou protótipos o uso dessa arquitetura pode trazer um esforço a mais. aplicabilidade 🚨 ✅ seu aplicativo precisa de muitas integrações externas; a testabilidade for um fator importante. Quando você precisa: HEXAGONAL:

Slide 34

Slide 34 text

Carine Bertagnolli Mônica Ribeiro Backend Dev Pleno @ Zup Backend Dev Spec. @ Zup Obrigada! 🚀