Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Decisões Arquiteturais: O que se encaixa no meu projeto?

Decisões Arquiteturais: O que se encaixa no meu projeto?

Palestra feita no evento TDC Business no dia 21 de Setembro de 2023 na trilha de Arquitetura Java.

Mônica Ribeiro

September 22, 2023
Tweet

More Decks by Mônica Ribeiro

Other Decks in Technology

Transcript

  1. 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"
  2. 1 Separação de responsabilidades Quais pratos equilibrar? 2 Testabilidade 3

    Flexibilidade e Extensibilidade 4 Manutenção 5 Aplicabilidade
  3. 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
  4. model view controller 1 renderiza request MVC: separação de responsabilidades

    response banco de dados retorna os eventos Usuário HTTP Response HTTP request
  5. 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 🚨
  6. 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.
  7. 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
  8. 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:
  9. MVP: 1 model view presenter dados e lógica de negócio

    coordena apresentar os dados separação de responsabilidades
  10. 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 🚨
  11. 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
  12. 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
  13. 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:
  14. 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
  15. 1 requisita dado formatado ação do usuário responde model view

    viewmodel MVVM: separação de responsabilidades Data binding Observer pattern
  16. 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.
  17. 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. 🚨
  18. 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:
  19. 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:
  20. O foco principal é isolar a lógica de negócio do

    mundo externo, permitindo a fácil substituição de componentes externos.
  21. 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
  22. 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
  23. 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:
  24. 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
  25. 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: