InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acoplada a um framework para uma arquitetura limpa

iMasters
iMastersjornalista, web editor, web writer, tradutora (en-pt/pt-en) at iMasters
ESCAPING FROM
THE FRAMEWORK
guided by Clean Archictecture
Ubiratan Soares
Outubro/2016
ERA UMA VEZ UM
DESENVOLVEDOR ...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acoplada a um framework para uma arquitetura limpa
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acoplada a um framework para uma arquitetura limpa
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acoplada a um framework para uma arquitetura limpa
UM LUGAR COMUM
• Documentações oficiais enviesam acoplamento
• Senso comum direciona para arquiteturas orientadas a dados
• Acoplamento dificulta testabilidade
• Uso comum de GOD models, Fat Controllers, Views Inteligentes,
Singletons e outros
FRAMEWORK
VIEW/CONTROLLER
RestManager mngr = …
DAOBridge bridge = …
DAOBridge
RestManager
Model A
Model B
Model C
Model D
frameworkview.setData(model.attribute)
MODEL
api.getModel(callback)
modelDAO.query(args)
App (Visão Romântica)
CONTROLLER CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
App (Visão Real)
SINGLETON
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acoplada a um framework para uma arquitetura limpa
WTF ?????
COMO REPRODUZIR ESSE ERRO?
COMO CORRIGIR ESSE ERRO?
COMO GARANTIR QUE NÃO OCORRERÁ
NOVAMENTE?
COMO SABER SE A CORREÇÃO NÃO
GEROU OUTROS ERROS?
MALES DO ACOPLAMENTO
• Não torna a aplicação portável
• Vincula a aplicação a frameworks e ferramentas
• Torna difícil testar regras de negócio e comportamentos esperados
• Apodrece o código a médio prazo
COMO ESCAPAR
DO FRAMEWORK ?
ARQUITETURA DE SOFTWARE
• Uma maneira de organizar as coisas
• Estilos sobre as definições de componentes, camadas e
relacionamentos
• Boa arquitetura : facilidade de manutenção e extensão, legibilidade,
entendimento do que acontece, testabilidade, flexível
• Arquitetura ruim : difícil manutenção, rígida, frágil, difícil de se encontrar
o que se precisa, sem testes, alta complexidade
DATA-CENTRIC ARCHITECTURE
UI
BUSINESS LOGIC (MODEL + CONTROL)
DATABASE NETWORKING ETC
UI
Networking
Entities
Usecases
Presenters
Gateways
DB
Drivers
Device
Adapters
Interactors
DOMAIN CENTRIC (aka Clean)
Data Access
(External World
REST, DB, etc)
UI
Bussiness Logic
DATA CENTRIC
https://vimeo.com/43612849
CLEAN ARCHICTECTURE
• R.O.I em continuidade a
longo prazo
• Favorece práticas como
S.O.L.I.D e testabilidade
• Deixa explícitas as regras
de negócio
• Database é detalhe
• REST e networking são detalhes
• UI rendering e frameworks são detalhes
• Entidades (conceitos) são essenciais
• Casos de uso são essenciais
• Contratos de apresentação são essenciais
Motivações Distinção entre essencial e detalhes
DEPENDENCY
RULE
UI
Networking
Entities
Usecases
Presenters
Gateways
DB
Drivers
Device
Adapters
Interactors
Camada mais externa em
geral depende de um contrato
com a camada mais interna
Camadas mais externas mais
próximas às fronteiras da
aplicação
Camadas ao centro contém
as regras de negócio
( o que a aplicação faz)
DOMAIN-CENTRIC ARCHITECTURE
PRESENTATION
LAYER
DOMAIN
LAYER
DATA
LAYER
DB
REST
ETC
UI
. . .
TRÊS GRANDES PILARES
• O comportamento da sua aplicação deveria depender exclusivamente
da linguagem, e não de frameworks e ferramentas
• Sua aplicação se relaciona com comportamentos, como por exemplo,
interfaces para entregar e receber dados : frameworks implementam
esses comportamentos
• O núcleo da aplicação deve ser 100% testável; isso inclui TODAS as
regras de negócio
USECASE
REST GATEWAY
PRESENTER
VIEW CONTRACT
PLATAFORM CONTROLLER
DEFINIR
FRONTEIRAS
SOURCE CONTRACT
ENTITY
APPLICATION
CORE
Associação
Dependência
DOMÍNIO DA APLICAÇÃO
• Indica aquilo que a aplicação faz
• Casos de uso sobre entidades do domínio (modelos), que são as representações
dos conceitos para a aplicação (não para a UI, nem para sistemas externos)
• Exemplos típicos :
• AddToBasket.with(Item)
• RetrieveCustomerData.execute( )
• PerformPurchase.execute(Review)
• etc
• Casos de uso fazem muito sentido quando existem oportunidades explícitas de
reúso
USECASE 01
PRESENTER
VIEW CONTRACT
PLATAFORM CONTROLLER
(passive delivery)
USECASE 02
VIEW MODEL
ISOLANDO A
INTERFACE
Associação
Dependência
Application
Boundary
INPUT MODEL
ENTITY A ENTITY B
USECASE
SOURCE CONTRACT
REST IMPLEMENTATION
(delivery mechanism)
REQUEST MODEL
Application
Boundary
ISOLANDO I/O
DAO / ORM / etc
(delivery mechanism)
RESPONSE MODEL TUPLE MODEL
QUERY MODEL
ENTITY A
ENTITY B
Associação
Dependência
SOURCE CONTRACT
SEPARE REPRESENTAÇÕES
String description = “Blah”
String date = “2010-02-26T19:35:24Z”
int step = 2
String description = “Blah”
LocalDateTime dateTime = (language representation)
TrackingStep currentStep = (enum)
String description = “Blah”
String formattedDate = “26/02/2010”
String currentStep = “Concluído”
Response Model
Domain Model (Entity)
ViewModel
CONECTANDO CAMADAS
Estratégia Vantagens Desvantagens
Síncrono Método mais simples
Casos de uso não podem executar em
paralelo; restrições de contexto
Callbacks
Geralmente suportados pela própria
linguagem
Difícies de debuggar com concorrência
e/ou múltiplas camadas; problemas
com ciclo de vida de objetos
Barramento de
eventos
Resolvem Callback Hell
Normalmente sem suporte a threading,
mais difícil de debuggar e testar que
callbacks
Reactive
Programming
Assincronia e concorrência com API ao
estilo síncrono; fáceis de testar
Difíceis de aprender, não
necessariamente fáceis de debuggar
COMO TESTAR?
UNIT TESTS
(Mocked Contract)
FUNCTIONAL UI TESTS
INTEGRATION TESTS
USECASE
EXTERNAL WORLD ADAPTER
PRESENTER
VIEW CONTRACT
PLATAFORM CONTROLLER
SOURCE CONTRACT
ENTITY
INTEGRATION TESTS
(DOUBLES)
UNIT
ACCEPTANCE
E2E
INTEGRATION
UNIT TESTS
(Mocked Contract
+
Mocked Usecase)
EVITE O SANDUÍCHE
UNEEDED ENTITY
UNEEDED USECASE
UNEEDED DOMAIN SERVICE
PRESENTER
• Sintoma da radicalidade de querer tudo SOLID
• Boillerplate desnecessário (código e testes)
• Díficil de identificar no médio prazo
• Origens típicas :
Adotar o mesmo modelo de layers em todo o lugar
possível
Tentar prever o futuro
ORGANIZE POR CONTEXTO
typical-packaging
├── activies
├── adapters
├── fragments
├── networking
├── ...
├── services
├── storage
├── util
└── widgets
clear-intentions—packaging
├── customer
├── checkout
│   ├── basket
│   ├── purchase
│   └── review
├── orders
├── products
├── ...
├── push
└── shared
VS
ORGANIZAÇÃO FUNCIONAL
• Intenção explícita
• Localidade espacial
• Fácil Navegação
• Fácil identificar onde estão
dependências de
ferramentas
• Pode quebrar convenções de frameworks
• Pode quebrar scaffolding / file
templates / etc
• Testes deveriam seguir mesma
organização, mas podem morar em
diretórios diferentes (replicação manual)
• Normalmente o projeto nasce organizado
por categorias : difícil migração
Benefícios Potenciais problemas
CONCLUINDO
DIFICULDADES TÍPICAS
• “É preciso escrever muito código para ter algo realmente funcionando”
• Flerte constante com overengineering
• Decisões de quantas e quais camadas adotar e quais são as apropriadas
dependem de contexto, dentro da própria aplicação
• Projetos em andamento não nascem nessa estrutura e precisam ser
migrados; identificar as fronteiras é fácil, identificar domínio e casos de
uso pode ser mais difícil
• Não há ROI imediato, nem Silver Bullets
CONSIDERAÇÕES FINAIS
• Clean Architecture tem a ver com idéias de organizar as coisas e não
com fórmulas prontas
• Defina sua arquitetura de maneira a deixar claras as intenções do seu
código e da sua aplicação
• Sua aplicação é um grande roteador entre agentes de interesse, separe o
essencial (o que ela é ) dos detalhes (que podem ser substituídos)
• Comece pelo simples, extraindo comportamentos nas fronteiras do(s)
framework(s) e fazendo inversão de controle o(s) mesmo(s)
UBIRATAN
SOARES
Computer Scientist by ICMC/USP
Software Engineer @ luizalabs
Google Developer Expert for Android
Teacher, speaker, etc, etc
https://speakerdeck.com/ubiratansoares/escaping-from-the-framework
OBRIGADO
@ubiratanfsoares
ubiratansoares.github.io
https://br.linkedin.com/in/ubiratanfsoares
1 of 39

Recommended

InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer by
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecerInterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouqueceriMasters
1.4K views65 slides
Phonegap by
PhonegapPhonegap
PhonegapLucas Aquiles
5.3K views106 slides
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap by
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapAplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapThiago Colares
1.6K views42 slides
Desenvolvendo para Android com PhoneGap by
Desenvolvendo para Android com PhoneGapDesenvolvendo para Android com PhoneGap
Desenvolvendo para Android com PhoneGapMayron Cachina
9.2K views64 slides
instalação do phonegap(cordova) no windows 8.1 by
instalação do phonegap(cordova) no windows 8.1instalação do phonegap(cordova) no windows 8.1
instalação do phonegap(cordova) no windows 8.1Afonso Fernandes
5.1K views42 slides
SESTINFO 2011 Apresentacao Android by
SESTINFO 2011 Apresentacao AndroidSESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao AndroidRafael Sakurai
2.7K views44 slides

More Related Content

What's hot

Curso: Desenvolvimento de aplicativos híbridos (dia 2) by
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Wennder Santos
439 views82 slides
Ionic 2 como ferramenta para desenvolvimento móvel by
Ionic 2 como ferramenta para desenvolvimento móvelIonic 2 como ferramenta para desenvolvimento móvel
Ionic 2 como ferramenta para desenvolvimento móvelGustavo Costa
1.3K views31 slides
Angular.JS - Estado Atual by
Angular.JS - Estado AtualAngular.JS - Estado Atual
Angular.JS - Estado AtualGustavo Costa
645 views59 slides
Phonegap autorefresh - app direto no celular sem emulador by
Phonegap autorefresh - app direto no celular sem emuladorPhonegap autorefresh - app direto no celular sem emulador
Phonegap autorefresh - app direto no celular sem emuladorAfonso Fernandes
4.3K views18 slides
Symfony - PHP pra gente grande by
Symfony - PHP pra gente grandeSymfony - PHP pra gente grande
Symfony - PHP pra gente grandeLuã de Souza
935 views57 slides
Conhecendo o PhoneGap by
Conhecendo o PhoneGapConhecendo o PhoneGap
Conhecendo o PhoneGapCristiano Gomes
5.5K views41 slides

What's hot(19)

Curso: Desenvolvimento de aplicativos híbridos (dia 2) by Wennder Santos
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Wennder Santos439 views
Ionic 2 como ferramenta para desenvolvimento móvel by Gustavo Costa
Ionic 2 como ferramenta para desenvolvimento móvelIonic 2 como ferramenta para desenvolvimento móvel
Ionic 2 como ferramenta para desenvolvimento móvel
Gustavo Costa1.3K views
Angular.JS - Estado Atual by Gustavo Costa
Angular.JS - Estado AtualAngular.JS - Estado Atual
Angular.JS - Estado Atual
Gustavo Costa645 views
Phonegap autorefresh - app direto no celular sem emulador by Afonso Fernandes
Phonegap autorefresh - app direto no celular sem emuladorPhonegap autorefresh - app direto no celular sem emulador
Phonegap autorefresh - app direto no celular sem emulador
Afonso Fernandes4.3K views
Symfony - PHP pra gente grande by Luã de Souza
Symfony - PHP pra gente grandeSymfony - PHP pra gente grande
Symfony - PHP pra gente grande
Luã de Souza935 views
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic by Felipe Blini
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e IonicCurso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Felipe Blini2.5K views
Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te... by Cássio Nandi Citadin
Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...
Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen... by Criciúma Dev
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Criciúma Dev305 views
Curso: Desenvolvimento de aplicativos híbridos (dia 1) by Wennder Santos
Curso: Desenvolvimento de aplicativos híbridos (dia 1)Curso: Desenvolvimento de aplicativos híbridos (dia 1)
Curso: Desenvolvimento de aplicativos híbridos (dia 1)
Wennder Santos611 views
Abra sua cabeça, apps híbridos - PhoneGap/Cordova by Gustavo Costa
Abra sua cabeça, apps híbridos - PhoneGap/CordovaAbra sua cabeça, apps híbridos - PhoneGap/Cordova
Abra sua cabeça, apps híbridos - PhoneGap/Cordova
Gustavo Costa3.7K views
Angular - Um novo change detection by Gustavo Costa
Angular - Um novo change detectionAngular - Um novo change detection
Angular - Um novo change detection
Gustavo Costa1.4K views
Desenvolvimento Mobile: Android e iOS caminhando juntos by Elo7
Desenvolvimento Mobile: Android e iOS caminhando juntosDesenvolvimento Mobile: Android e iOS caminhando juntos
Desenvolvimento Mobile: Android e iOS caminhando juntos
Elo72.1K views
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software by André Dias
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu SoftwareDevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
André Dias2.4K views
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos. by Letticia Nicoli
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos.Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos.
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos.
Letticia Nicoli424 views
Machine Learning para devs com ML.NET by Letticia Nicoli
Machine Learning para devs com ML.NETMachine Learning para devs com ML.NET
Machine Learning para devs com ML.NET
Letticia Nicoli167 views
Phonegap, muito além dos nativos! by Luiz Gavinho
Phonegap, muito além dos nativos!Phonegap, muito além dos nativos!
Phonegap, muito além dos nativos!
Luiz Gavinho2.1K views

Viewers also liked

Compras Online e Acessibilidade: Melhorando a Experiência de Usuários de Leit... by
Compras Online e Acessibilidade: Melhorando a Experiência de Usuários de Leit...Compras Online e Acessibilidade: Melhorando a Experiência de Usuários de Leit...
Compras Online e Acessibilidade: Melhorando a Experiência de Usuários de Leit...Juliana Fernandes
1.6K views70 slides
InterCon 2016 - Utilizando recursos de realidade aumentada em aplicações by
InterCon 2016 - Utilizando recursos de realidade aumentada em aplicaçõesInterCon 2016 - Utilizando recursos de realidade aumentada em aplicações
InterCon 2016 - Utilizando recursos de realidade aumentada em aplicaçõesiMasters
981 views18 slides
InterCon 2016 - Desenvolvimento para experiências em real time com foco na se... by
InterCon 2016 - Desenvolvimento para experiências em real time com foco na se...InterCon 2016 - Desenvolvimento para experiências em real time com foco na se...
InterCon 2016 - Desenvolvimento para experiências em real time com foco na se...iMasters
810 views49 slides
InterCon 2016 - Performance, anti-patterns e stacks para desenvolvimento ágil by
InterCon 2016 - Performance, anti-patterns e stacks para desenvolvimento ágilInterCon 2016 - Performance, anti-patterns e stacks para desenvolvimento ágil
InterCon 2016 - Performance, anti-patterns e stacks para desenvolvimento ágiliMasters
930 views136 slides
InterCon 2016 - HTTP/2 for Web Application Developers by
InterCon 2016 - HTTP/2 for Web Application DevelopersInterCon 2016 - HTTP/2 for Web Application Developers
InterCon 2016 - HTTP/2 for Web Application DevelopersiMasters
992 views55 slides
InterCon 2016 - VR Experiences by
InterCon 2016 - VR ExperiencesInterCon 2016 - VR Experiences
InterCon 2016 - VR ExperiencesiMasters
1.1K views46 slides

Viewers also liked(20)

Compras Online e Acessibilidade: Melhorando a Experiência de Usuários de Leit... by Juliana Fernandes
Compras Online e Acessibilidade: Melhorando a Experiência de Usuários de Leit...Compras Online e Acessibilidade: Melhorando a Experiência de Usuários de Leit...
Compras Online e Acessibilidade: Melhorando a Experiência de Usuários de Leit...
Juliana Fernandes1.6K views
InterCon 2016 - Utilizando recursos de realidade aumentada em aplicações by iMasters
InterCon 2016 - Utilizando recursos de realidade aumentada em aplicaçõesInterCon 2016 - Utilizando recursos de realidade aumentada em aplicações
InterCon 2016 - Utilizando recursos de realidade aumentada em aplicações
iMasters981 views
InterCon 2016 - Desenvolvimento para experiências em real time com foco na se... by iMasters
InterCon 2016 - Desenvolvimento para experiências em real time com foco na se...InterCon 2016 - Desenvolvimento para experiências em real time com foco na se...
InterCon 2016 - Desenvolvimento para experiências em real time com foco na se...
iMasters810 views
InterCon 2016 - Performance, anti-patterns e stacks para desenvolvimento ágil by iMasters
InterCon 2016 - Performance, anti-patterns e stacks para desenvolvimento ágilInterCon 2016 - Performance, anti-patterns e stacks para desenvolvimento ágil
InterCon 2016 - Performance, anti-patterns e stacks para desenvolvimento ágil
iMasters930 views
InterCon 2016 - HTTP/2 for Web Application Developers by iMasters
InterCon 2016 - HTTP/2 for Web Application DevelopersInterCon 2016 - HTTP/2 for Web Application Developers
InterCon 2016 - HTTP/2 for Web Application Developers
iMasters992 views
InterCon 2016 - VR Experiences by iMasters
InterCon 2016 - VR ExperiencesInterCon 2016 - VR Experiences
InterCon 2016 - VR Experiences
iMasters1.1K views
InterCon 2016 - Desenvolvimento para interfaces em vídeo e cases da plataform... by iMasters
InterCon 2016 - Desenvolvimento para interfaces em vídeo e cases da plataform...InterCon 2016 - Desenvolvimento para interfaces em vídeo e cases da plataform...
InterCon 2016 - Desenvolvimento para interfaces em vídeo e cases da plataform...
iMasters1.5K views
Internet dos Trem e como não colocar fogo em casa by Luís Leão
Internet dos Trem e como não colocar fogo em casaInternet dos Trem e como não colocar fogo em casa
Internet dos Trem e como não colocar fogo em casa
Luís Leão461 views
InterCon 2016 - Desafios de conectividade de dispositivos em realtime by iMasters
InterCon 2016 - Desafios de conectividade de dispositivos em realtimeInterCon 2016 - Desafios de conectividade de dispositivos em realtime
InterCon 2016 - Desafios de conectividade de dispositivos em realtime
iMasters976 views
InterCon 2016 - Backend do IoT com RethinkDB e Python by iMasters
InterCon 2016 - Backend do IoT com RethinkDB e PythonInterCon 2016 - Backend do IoT com RethinkDB e Python
InterCon 2016 - Backend do IoT com RethinkDB e Python
iMasters1.5K views
Usando o Twitter na Internet das Coisas - #WebBR2016 by Juliana Chahoud
Usando o Twitter  na Internet das Coisas - #WebBR2016Usando o Twitter  na Internet das Coisas - #WebBR2016
Usando o Twitter na Internet das Coisas - #WebBR2016
Juliana Chahoud1.1K views
InterCon 2016 - Internet of “Thinking” – IoT sem BS com ESP8266 by iMasters
InterCon 2016 - Internet of “Thinking” – IoT sem BS com ESP8266InterCon 2016 - Internet of “Thinking” – IoT sem BS com ESP8266
InterCon 2016 - Internet of “Thinking” – IoT sem BS com ESP8266
iMasters1.3K views
InterCon 2016 - BioHacking: criando dispositivos de biotecnologia OpenSource/... by iMasters
InterCon 2016 - BioHacking: criando dispositivos de biotecnologia OpenSource/...InterCon 2016 - BioHacking: criando dispositivos de biotecnologia OpenSource/...
InterCon 2016 - BioHacking: criando dispositivos de biotecnologia OpenSource/...
iMasters1.2K views
InterCon 2016 - Blockchain e smart-contracts em Ethereu by iMasters
InterCon 2016 - Blockchain e smart-contracts em EthereuInterCon 2016 - Blockchain e smart-contracts em Ethereu
InterCon 2016 - Blockchain e smart-contracts em Ethereu
iMasters1K views
InterCon 2016 - Software as a service usando Go como principal linguagem: os ... by iMasters
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
iMasters942 views
InterCon 2016 - SLA vs Agilidade: uso de microserviços e monitoramento de cloud by iMasters
InterCon 2016 - SLA vs Agilidade: uso de microserviços e monitoramento de cloudInterCon 2016 - SLA vs Agilidade: uso de microserviços e monitoramento de cloud
InterCon 2016 - SLA vs Agilidade: uso de microserviços e monitoramento de cloud
iMasters1.1K views
InterCon 2016 - A revolução da Internet das Coisas na educação by iMasters
InterCon 2016 - A revolução da Internet das Coisas na educaçãoInterCon 2016 - A revolução da Internet das Coisas na educação
InterCon 2016 - A revolução da Internet das Coisas na educação
iMasters1.1K views
AppCívico - Tecnologias cívicas estão impactando políticas públicas by Thiago Rondon
AppCívico - Tecnologias cívicas estão impactando políticas públicasAppCívico - Tecnologias cívicas estão impactando políticas públicas
AppCívico - Tecnologias cívicas estão impactando políticas públicas
Thiago Rondon523 views
Ux para aumentar a liberdade dos diabéticos by Fernanda Bernardo
Ux para aumentar a liberdade dos diabéticosUx para aumentar a liberdade dos diabéticos
Ux para aumentar a liberdade dos diabéticos
Fernanda Bernardo815 views

Similar to InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acoplada a um framework para uma arquitetura limpa

Clean Architecture by
Clean ArchitectureClean Architecture
Clean ArchitectureRodrigo Branas
757 views70 slides
Mocks, Stubs e Fakes - Developers-SP - Julho-2017 by
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Renato Groff
87 views37 slides
Hexagonal Rails by
Hexagonal RailsHexagonal Rails
Hexagonal RailsLuiz Costa
1.2K views105 slides
Mocking Test - ThinkUp! - Abril/2017 by
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Renato Groff
1.3K views34 slides
Design Patterns by
Design PatternsDesign Patterns
Design PatternsGlaucio Scheibel
2.8K views79 slides
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018 by
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Renato Groff
133 views63 slides

Similar to InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acoplada a um framework para uma arquitetura limpa(20)

Mocks, Stubs e Fakes - Developers-SP - Julho-2017 by Renato Groff
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Renato Groff87 views
Hexagonal Rails by Luiz Costa
Hexagonal RailsHexagonal Rails
Hexagonal Rails
Luiz Costa1.2K views
Mocking Test - ThinkUp! - Abril/2017 by Renato Groff
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017
Renato Groff1.3K views
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018 by Renato Groff
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Renato Groff133 views
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei... by Renato Groffe
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Renato Groffe74 views
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado by Luiz Costa
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Luiz Costa1.5K views
Padroes de projetos gof by Yan Justino
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
Yan Justino1.1K views
Introdução ao Domain-Driven Design by André Borgonovo
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
André Borgonovo2.2K views
Mocking Test - GDG-SP - Setembro/2016 by Renato Groff
Mocking Test - GDG-SP - Setembro/2016Mocking Test - GDG-SP - Setembro/2016
Mocking Test - GDG-SP - Setembro/2016
Renato Groff229 views
ODI SERIES - Melhores Práticas by Caio Lima
ODI SERIES - Melhores PráticasODI SERIES - Melhores Práticas
ODI SERIES - Melhores Práticas
Caio Lima2.1K views
Programação Orientada a Aspectos by Ricardo Terra
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
Ricardo Terra1.8K views
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018 by Renato Groff
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Renato Groff1.5K views
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D... by minastestingconference
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...

More from iMasters

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro by
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroiMasters
1.4K views40 slides
Postgres: wanted, beloved or dreaded? - Fabio Telles by
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
603 views51 slides
Por que minha query esta lenta? - Suellen Moraes by
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesiMasters
370 views12 slides
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig... by
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...iMasters
298 views9 slides
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves by
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesiMasters
324 views31 slides
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -... by
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
1.7K views52 slides

More from iMasters(20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro by iMasters
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
iMasters1.4K views
Postgres: wanted, beloved or dreaded? - Fabio Telles by iMasters
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
iMasters603 views
Por que minha query esta lenta? - Suellen Moraes by iMasters
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
iMasters370 views
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig... by iMasters
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
iMasters298 views
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves by iMasters
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
iMasters324 views
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -... by iMasters
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
iMasters1.7K views
Arquitetando seus dados na prática para a LGPD - Alessandra Martins by iMasters
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
iMasters3.3K views
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil... by iMasters
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
iMasters287 views
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud by iMasters
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
iMasters950 views
Use MDD e faça as máquinas trabalharem para você - Andreza Leite by iMasters
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
iMasters682 views
Entendendo os porquês do seu servidor - Talita Bernardes by iMasters
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
iMasters544 views
Backend performático além do "coloca mais máquina lá" - Diana Arnos by iMasters
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
iMasters477 views
Dicas para uma maior performance em APIs REST - Renato Groffe by iMasters
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
iMasters595 views
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro by iMasters
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
iMasters475 views
Quem se importa com acessibilidade Web? - Mauricio Maujor by iMasters
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
iMasters480 views
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva by iMasters
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
iMasters603 views
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti by iMasters
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
iMasters559 views
Elasticidade e engenharia de banco de dados para alta performance - Rubens G... by iMasters
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
iMasters569 views
Construindo aplicações mais confiantes - Carolina Karklis by iMasters
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
iMasters477 views
Monitoramento de Aplicações - Felipe Regalgo by iMasters
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
iMasters709 views

Recently uploaded

A documentação de um programa é fundamental, independentemente da linguagem d... by
A documentação de um programa é fundamental, independentemente da linguagem d...A documentação de um programa é fundamental, independentemente da linguagem d...
A documentação de um programa é fundamental, independentemente da linguagem d...josecarlos413721
12 views5 slides
O setor de PCP faz a gestão dos estoques de produtos acabados, matérias-prima... by
O setor de PCP faz a gestão dos estoques de produtos acabados, matérias-prima...O setor de PCP faz a gestão dos estoques de produtos acabados, matérias-prima...
O setor de PCP faz a gestão dos estoques de produtos acabados, matérias-prima...josecarlos413721
7 views4 slides
Capturas microbit.docx by
Capturas microbit.docxCapturas microbit.docx
Capturas microbit.docxseruto231014
8 views5 slides
Uma exposição em um centro de convenção precisa contabilizar os visitantes po... by
Uma exposição em um centro de convenção precisa contabilizar os visitantes po...Uma exposição em um centro de convenção precisa contabilizar os visitantes po...
Uma exposição em um centro de convenção precisa contabilizar os visitantes po...josecarlos413721
48 views3 slides
Competências para extrair inovação na tecnologia! by
Competências para extrair inovação na tecnologia!Competências para extrair inovação na tecnologia!
Competências para extrair inovação na tecnologia!Annelise Gripp
15 views11 slides
As ferramentas gerenciais da qualidade são estabelecidas para auxiliar a empr... by
As ferramentas gerenciais da qualidade são estabelecidas para auxiliar a empr...As ferramentas gerenciais da qualidade são estabelecidas para auxiliar a empr...
As ferramentas gerenciais da qualidade são estabelecidas para auxiliar a empr...josecarlos413721
12 views2 slides

Recently uploaded(10)

A documentação de um programa é fundamental, independentemente da linguagem d... by josecarlos413721
A documentação de um programa é fundamental, independentemente da linguagem d...A documentação de um programa é fundamental, independentemente da linguagem d...
A documentação de um programa é fundamental, independentemente da linguagem d...
josecarlos41372112 views
O setor de PCP faz a gestão dos estoques de produtos acabados, matérias-prima... by josecarlos413721
O setor de PCP faz a gestão dos estoques de produtos acabados, matérias-prima...O setor de PCP faz a gestão dos estoques de produtos acabados, matérias-prima...
O setor de PCP faz a gestão dos estoques de produtos acabados, matérias-prima...
Uma exposição em um centro de convenção precisa contabilizar os visitantes po... by josecarlos413721
Uma exposição em um centro de convenção precisa contabilizar os visitantes po...Uma exposição em um centro de convenção precisa contabilizar os visitantes po...
Uma exposição em um centro de convenção precisa contabilizar os visitantes po...
josecarlos41372148 views
Competências para extrair inovação na tecnologia! by Annelise Gripp
Competências para extrair inovação na tecnologia!Competências para extrair inovação na tecnologia!
Competências para extrair inovação na tecnologia!
Annelise Gripp15 views
As ferramentas gerenciais da qualidade são estabelecidas para auxiliar a empr... by josecarlos413721
As ferramentas gerenciais da qualidade são estabelecidas para auxiliar a empr...As ferramentas gerenciais da qualidade são estabelecidas para auxiliar a empr...
As ferramentas gerenciais da qualidade são estabelecidas para auxiliar a empr...
josecarlos41372112 views
Um edifício é composto tanto de elementos estruturais — que são dimensionados... by josecarlos413721
Um edifício é composto tanto de elementos estruturais — que são dimensionados...Um edifício é composto tanto de elementos estruturais — que são dimensionados...
Um edifício é composto tanto de elementos estruturais — que são dimensionados...
josecarlos41372114 views
Competências para extrair inovação na tecnologia! by AnneliseGripp1
Competências para extrair inovação na tecnologia!Competências para extrair inovação na tecnologia!
Competências para extrair inovação na tecnologia!
AnneliseGripp19 views

InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acoplada a um framework para uma arquitetura limpa

  • 1. ESCAPING FROM THE FRAMEWORK guided by Clean Archictecture Ubiratan Soares Outubro/2016
  • 2. ERA UMA VEZ UM DESENVOLVEDOR ...
  • 6. UM LUGAR COMUM • Documentações oficiais enviesam acoplamento • Senso comum direciona para arquiteturas orientadas a dados • Acoplamento dificulta testabilidade • Uso comum de GOD models, Fat Controllers, Views Inteligentes, Singletons e outros
  • 7. FRAMEWORK VIEW/CONTROLLER RestManager mngr = … DAOBridge bridge = … DAOBridge RestManager Model A Model B Model C Model D frameworkview.setData(model.attribute) MODEL api.getModel(callback) modelDAO.query(args)
  • 12. COMO REPRODUZIR ESSE ERRO? COMO CORRIGIR ESSE ERRO? COMO GARANTIR QUE NÃO OCORRERÁ NOVAMENTE? COMO SABER SE A CORREÇÃO NÃO GEROU OUTROS ERROS?
  • 13. MALES DO ACOPLAMENTO • Não torna a aplicação portável • Vincula a aplicação a frameworks e ferramentas • Torna difícil testar regras de negócio e comportamentos esperados • Apodrece o código a médio prazo
  • 15. ARQUITETURA DE SOFTWARE • Uma maneira de organizar as coisas • Estilos sobre as definições de componentes, camadas e relacionamentos • Boa arquitetura : facilidade de manutenção e extensão, legibilidade, entendimento do que acontece, testabilidade, flexível • Arquitetura ruim : difícil manutenção, rígida, frágil, difícil de se encontrar o que se precisa, sem testes, alta complexidade
  • 16. DATA-CENTRIC ARCHITECTURE UI BUSINESS LOGIC (MODEL + CONTROL) DATABASE NETWORKING ETC
  • 17. UI Networking Entities Usecases Presenters Gateways DB Drivers Device Adapters Interactors DOMAIN CENTRIC (aka Clean) Data Access (External World REST, DB, etc) UI Bussiness Logic DATA CENTRIC
  • 19. CLEAN ARCHICTECTURE • R.O.I em continuidade a longo prazo • Favorece práticas como S.O.L.I.D e testabilidade • Deixa explícitas as regras de negócio • Database é detalhe • REST e networking são detalhes • UI rendering e frameworks são detalhes • Entidades (conceitos) são essenciais • Casos de uso são essenciais • Contratos de apresentação são essenciais Motivações Distinção entre essencial e detalhes
  • 20. DEPENDENCY RULE UI Networking Entities Usecases Presenters Gateways DB Drivers Device Adapters Interactors Camada mais externa em geral depende de um contrato com a camada mais interna Camadas mais externas mais próximas às fronteiras da aplicação Camadas ao centro contém as regras de negócio ( o que a aplicação faz)
  • 22. TRÊS GRANDES PILARES • O comportamento da sua aplicação deveria depender exclusivamente da linguagem, e não de frameworks e ferramentas • Sua aplicação se relaciona com comportamentos, como por exemplo, interfaces para entregar e receber dados : frameworks implementam esses comportamentos • O núcleo da aplicação deve ser 100% testável; isso inclui TODAS as regras de negócio
  • 23. USECASE REST GATEWAY PRESENTER VIEW CONTRACT PLATAFORM CONTROLLER DEFINIR FRONTEIRAS SOURCE CONTRACT ENTITY APPLICATION CORE Associação Dependência
  • 24. DOMÍNIO DA APLICAÇÃO • Indica aquilo que a aplicação faz • Casos de uso sobre entidades do domínio (modelos), que são as representações dos conceitos para a aplicação (não para a UI, nem para sistemas externos) • Exemplos típicos : • AddToBasket.with(Item) • RetrieveCustomerData.execute( ) • PerformPurchase.execute(Review) • etc • Casos de uso fazem muito sentido quando existem oportunidades explícitas de reúso
  • 25. USECASE 01 PRESENTER VIEW CONTRACT PLATAFORM CONTROLLER (passive delivery) USECASE 02 VIEW MODEL ISOLANDO A INTERFACE Associação Dependência Application Boundary INPUT MODEL ENTITY A ENTITY B
  • 26. USECASE SOURCE CONTRACT REST IMPLEMENTATION (delivery mechanism) REQUEST MODEL Application Boundary ISOLANDO I/O DAO / ORM / etc (delivery mechanism) RESPONSE MODEL TUPLE MODEL QUERY MODEL ENTITY A ENTITY B Associação Dependência SOURCE CONTRACT
  • 27. SEPARE REPRESENTAÇÕES String description = “Blah” String date = “2010-02-26T19:35:24Z” int step = 2 String description = “Blah” LocalDateTime dateTime = (language representation) TrackingStep currentStep = (enum) String description = “Blah” String formattedDate = “26/02/2010” String currentStep = “Concluído” Response Model Domain Model (Entity) ViewModel
  • 28. CONECTANDO CAMADAS Estratégia Vantagens Desvantagens Síncrono Método mais simples Casos de uso não podem executar em paralelo; restrições de contexto Callbacks Geralmente suportados pela própria linguagem Difícies de debuggar com concorrência e/ou múltiplas camadas; problemas com ciclo de vida de objetos Barramento de eventos Resolvem Callback Hell Normalmente sem suporte a threading, mais difícil de debuggar e testar que callbacks Reactive Programming Assincronia e concorrência com API ao estilo síncrono; fáceis de testar Difíceis de aprender, não necessariamente fáceis de debuggar
  • 30. UNIT TESTS (Mocked Contract) FUNCTIONAL UI TESTS INTEGRATION TESTS USECASE EXTERNAL WORLD ADAPTER PRESENTER VIEW CONTRACT PLATAFORM CONTROLLER SOURCE CONTRACT ENTITY INTEGRATION TESTS (DOUBLES) UNIT ACCEPTANCE E2E INTEGRATION UNIT TESTS (Mocked Contract + Mocked Usecase)
  • 31. EVITE O SANDUÍCHE UNEEDED ENTITY UNEEDED USECASE UNEEDED DOMAIN SERVICE PRESENTER • Sintoma da radicalidade de querer tudo SOLID • Boillerplate desnecessário (código e testes) • Díficil de identificar no médio prazo • Origens típicas : Adotar o mesmo modelo de layers em todo o lugar possível Tentar prever o futuro
  • 32. ORGANIZE POR CONTEXTO typical-packaging ├── activies ├── adapters ├── fragments ├── networking ├── ... ├── services ├── storage ├── util └── widgets clear-intentions—packaging ├── customer ├── checkout │   ├── basket │   ├── purchase │   └── review ├── orders ├── products ├── ... ├── push └── shared VS
  • 33. ORGANIZAÇÃO FUNCIONAL • Intenção explícita • Localidade espacial • Fácil Navegação • Fácil identificar onde estão dependências de ferramentas • Pode quebrar convenções de frameworks • Pode quebrar scaffolding / file templates / etc • Testes deveriam seguir mesma organização, mas podem morar em diretórios diferentes (replicação manual) • Normalmente o projeto nasce organizado por categorias : difícil migração Benefícios Potenciais problemas
  • 35. DIFICULDADES TÍPICAS • “É preciso escrever muito código para ter algo realmente funcionando” • Flerte constante com overengineering • Decisões de quantas e quais camadas adotar e quais são as apropriadas dependem de contexto, dentro da própria aplicação • Projetos em andamento não nascem nessa estrutura e precisam ser migrados; identificar as fronteiras é fácil, identificar domínio e casos de uso pode ser mais difícil • Não há ROI imediato, nem Silver Bullets
  • 36. CONSIDERAÇÕES FINAIS • Clean Architecture tem a ver com idéias de organizar as coisas e não com fórmulas prontas • Defina sua arquitetura de maneira a deixar claras as intenções do seu código e da sua aplicação • Sua aplicação é um grande roteador entre agentes de interesse, separe o essencial (o que ela é ) dos detalhes (que podem ser substituídos) • Comece pelo simples, extraindo comportamentos nas fronteiras do(s) framework(s) e fazendo inversão de controle o(s) mesmo(s)
  • 37. UBIRATAN SOARES Computer Scientist by ICMC/USP Software Engineer @ luizalabs Google Developer Expert for Android Teacher, speaker, etc, etc