SlideShare uma empresa Scribd logo
Revitalizando aplicações
Windows
Usando Cef/CefGlue, Message Bus e React.JS
Marcelo Palladino
public class MarceloPalladino: SerHumano,
IDesenvolvedor, IArquitetoDeSoftware
@mfpalladino
Henrique Sosa
Front-End Developer
@henriquesosa
Comunidades!
- Inovação em SaaS
- ReactSP
Disclaimer
Arquitetura de software?
"A arquitetura de software engloba o conjunto de decisões importantes sobre a
organização de um sistema de software, incluindo a seleção dos elementos
estruturais e as interfaces pelas quais o sistema se compõe; comportamento
como especificado na colaboração entre esses elementos; composição destes
elementos estruturais e comportamentais em subsistemas maiores; e um estilo
de arquitetura que orienta essa organização. Arquitetura de software envolve
também a funcionalidade, usabilidade, resistência, desempenho, reutilização,
compreensibilidade, restrições econômicas e tecnológicas, vantagens e
desvantagens e preocupações estéticas ."
Philippe Kruchten, Grady Booch, Kurt Bittner, and Rich Reitman derived and refined a definition of architecture based on work by Mary Shaw and David
Garlan (Shaw and Garlan 1996).
Arquitetura de software: Flowler sendo Flowler
“A indústria de software se delicia em pegar palavras e estendê-las em uma
miríade de significados sutilmente contraditórios. Uma das maiores sofredoras é
‘arquitetura’.”
● A decomposição em alto nível de um sistema em suas partes.
● Decisões que são difíceis de mudar.
● No final, a arquitetura se resume a coisas importantes - seja lá o que isso
signifique.
Patterns of Enterprise Application Architecture, Martin Fowler.
Alinhamento de Expectativas
- Não é um tutorial sobre Cef/CefGlue
- Não é uma palestra sobre React.JS
- Não é um live coding
- Detalhes de implementação
- https://github.com/henriquesosa
- https://github.com/mfpalladino
Tomadas de decisões de
arquitetura de software
Um pouco de contextualização
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js
1998
Contexto: Quem nunca?
- Cliente servidor
- Única aplicação de Chat no
Brasil
- Boom no mercado de
atendimento online
Operador
Windows
Chat
WEB
MSSQL
*desenho simplificado da arquitetura 1.0
Problema: Não escala!
2007
Contexto: O famoso três
camadas
Operador
Windows
Chat
WEBMSSQL
Servidor de
aplicação
SOAP
SOAP
Aplicação
*desenho simplificado da arquitetura 2.0 (três camadas)
O problema de escalabilidade ainda
persiste!
2011 - 2012
Problema de escala no
servidor definitivamente
resolvido
Contexto: Microserviços
- Persistência poliglota
- Caches distribuídos
- Filas
- Processos assíncronos
- Load balancers
- Auto scaling
Operador
Windows
Chat
WEB
MSSQL
Servidor de
aplicação
SOAP
REST
Serviço
MYSQL
Serviço
Dynamo
Serviço
S3
Serviço
Serviço
...
Serviço
Serviço ...
Aplicação
Microserviços
REST/XMPP
*desenho simplificado da arquitetura 3.0
(microserviços)
2015 - 2016
Um típico WindowsForms
LEGADO
- Uma palavra: GORDO
- base de código de ~10 anos
- ~150MB
- 50 projetos
- Alto acoplamento
- Alta complexidade
- …
- …
- Mas o principal é...
Operador Windows
Outros tipos de problemas de
escala
- Do ponto de vista do produto
- Difícil garantir adoção de correções/melhorias
- Métrica: Em média 2 anos para atualização em todos os operadores
- Limitador da evolução do produto
- Dificulta priorização no backlog
- Do ponto de vista do desenvolvimento
- O WindowsForms é antigo
- Profissionais cada vez mais escassos
Idiossincrasias do mercado de
callcenters
- Gestão de mudança no ambiente extremamente burocrática
- Poucas “janelas” para modificação no ambiente
- Grande limitação de recursos
- Acesso a recursos locais
- Versão .net framework
- IP de saída
Respostas de arquitetura
Não fazer nada e pedir
para sair
Reescrever tudo
- Prazo (8 meses a 1 ano)
- Custo sem entrega contínua de valor
- Muito tempo para concorrência agir
“They did it by making the single worst strategic mistake that any
software company can make:
They decided to rewrite the code from scratch.”
Joel Spolsky - Autor do artigo "Things You Should Never Do"
"Dar um jeito" de entregar valor
continuamente e resolver o
problema
Qual foi a forma e quais os finais esperados?
- Forma
- Substituir as partes da aplicação Windows por “micro” aplicações WEB
- Final intermediário
- Uma aplicação Windows que é apenas uma “casca” para várias aplicações WEB
- Final
- Uma aplicação Windows que é apenas uma “casca” para uma aplicação WEB
Preparação
- Pesquisa de casos parecidos
- Palestra do Felipe Ribeiro (Spotify) na BrazilJS 2015
- Conferência com o time de desenvolvimento
- Provas de conceito
Message Bus
(integrando através de mensageria)
WindowsForms
UserControl
Message Bus
WindowsForms
UserControl
WindowsForms
UserControl
WEB APP WEB APP WEB APP
Message Bus
(integrando através de mensageria)
- O conteúdo da mensagem inclui
informações relacionadas ao evento
- O formato da mensagem define um
contrato entre a aplicação Windows e
as partes WEB
1
2
Message Bus
(integrando através de mensageria)
- O Message Bus funciona como um
"canal inteligente".
- As partes "assinam" o canal para que
sejam notificadas quando mensagens
forem "adicionadas"
1
2
Message Bus: Por quê?
(integrando através de mensageria)
A relação de "publicação" e "consumo" passa a ser naturalmente assíncrona e
desacoplada!
Desejos:
- Uma aplicação Web totalmente
passiva
- Componentização
- Facilidade para manipulação
de diversos estados
- Transparência
CONTROLLER
MODELVIEW
*desenho simplificado da arquitetura do Front 1.0
CONTROLLER
MODEL
VIEW
*desenho simplificado da arquitetura do Front 2.0
VIEW
CONTROLLER
CONTROLLER
CONTROLLER
MODEL
MODEL
Problema: Não escala!
VIEW ACTION REDUCER STORE
*desenho de exemplo de recebimento de dados da aplicação Windows
MESSAGE
HANDLER
Mensagem
Front-end
APLICAÇÃO
WINDOWS
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js
Redux
- Redux is a predictable state container for JavaScript apps.
- Wrote by @dan_abramov
- http://redux.js.org
VIEW ACTION REDUCER STORE
MESSAGE
HANDLER
APLICAÇÃO
WINDOWS
Front-end
*desenho de exemplo de requisição para a aplicação Windows
VIEW ACTION REDUCER STORE
MESSAGE
HANDLER
APLICAÇÃO
WINDOWS
Mensagem
Front-end
*desenho de exemplo de requisição para a aplicação Windows
VIEW ACTION REDUCER STORE
MESSAGE
HANDLER
APLICAÇÃO
WINDOWS
Front-end
*desenho de exemplo de requisição para a aplicação Windows
VIEW ACTION REDUCER STORE
MESSAGE
HANDLER
APLICAÇÃO
WINDOWS
Front-end
*desenho de exemplo de requisição para a aplicação Windows
VIEW ACTION REDUCER STORE
MESSAGE
HANDLER
APLICAÇÃO
WINDOWS
Mensagem
Front-end
*desenho de exemplo de requisição para a aplicação Windows
VIEW ACTION REDUCER STORE
*desenho de exemplo de recebimento de dados da aplicação Windows
MESSAGE
HANDLER
Mensagem
Front-end
APLICAÇÃO
WINDOWS
Então por que React.js?
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js
React.Js
- A Javascript library for building user interfaces
- Wrote by Instagram
- Maintained by Facebook
- Brand new
- https://facebook.github.io/react
React.Js
Componentização
PAGE
LIST HEADERSEARCH
LIST ITEM
React.Js
Velocidade
PAGE
LIST
HEADER
SEARCH
LIST ITEM
LIST LIST ITEM
LIST ITEM
State
Só mais uma peça do quebra-
cabeças
Chromium Embedded
Framework
- Framework open source que
permite embedar web browser
baseado no Chromium core.
- https://bitbucket.
org/chromiumembedded/cef
Aplicação
Windows
Renderer 1
CEF Host
Renderer
“N”
CEF um pouco mais de perto
- CEF é um projeto de código aberto que permite aos desenvolvedores
facilmente exibir conteúdo HTML em suas aplicações desktop. A exibição de
HTML pode ser finamente controlada e até mesmo ampliado através da API
disponíveis. Por baixo dos panos, a renderização do HTML é feita por meio
do Chromium browser, usando a engine Blink (anteriormente WebKit) e a
máquina virtual V8 JavaScript.
CEF como framework
- Como framework, o CEF fornece um conjunto de headers e uma biblioteca.
Ele está disponível para Windows, Mac OSX e Linux. As APIs C++ e C estão
disponíveis como parte do projeto, mas há projetos que mantêm bindings
para outros ambientes como .NET, Java e Python.
CefGlue
- Binding .NET/Mono para o Chromium Embedded Framework (CEF).
- https://bitbucket.org/xilium/xilium.cefglue/wiki/Home
1
2
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js
CEF: Por quê?
- Tentamos usar o IE…
- Mais casos de uso conhecidos com CEF
Pontos de atenção
- Contexto de thread
- Menu de contexto
- Log
- DevTools
- Memória
- Um processo vs vários
processos
Pontos de atenção
- Contexto de thread
- Menu de contexto
- Log
- DevTools
- Memória
- Um processo vs vários
processos
Pontos de atenção
- Contexto de thread
- Menu de contexto
- Log
- DevTools
- Memória
- Um processo vs vários
processos
Pontos de atenção
- Contexto de thread
- Menu de contexto
- Log
- DevTools
- Memória
- Um processo vs vários
processos
Pontos de atenção
- Contexto de thread
- Menu de contexto
- Log
- DevTools
- Memória
- Um processo vs vários
processos
Conclusões
- Entender a visão de longo prazo do projeto
- Trabalhar com restrições econômicas
- Trabalhar com restrições tecnológicas
- Gerar, entender e trabalhar com base em métricas
- Transitar bem entre diferentes times
- Lidar com conflitos técnicos
Obrigado!

Mais conteúdo relacionado

PDF
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
PPTX
PPTX
Introdução a arquitetura de sistemas com .NET
PPTX
4º FastShow - WPF Windows Presentation Foundation Overview
PDF
Introdução a Arquitetura de Sistemas
PDF
Arquitetura de Sofware
PPT
Adobe Flex
PDF
Mod06 licao01-apostila
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
Introdução a arquitetura de sistemas com .NET
4º FastShow - WPF Windows Presentation Foundation Overview
Introdução a Arquitetura de Sistemas
Arquitetura de Sofware
Adobe Flex
Mod06 licao01-apostila

Mais procurados (18)

PPT
Arquitetura de sistemas web
PPT
Apresentação Facelets_UNIFEI
PDF
Framework7
PDF
Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
PDF
Arquitetura MVC
ODP
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
PDF
O rad da wave maker developing for the cloud
PPTX
Framework Foundation Basicão
DOCX
Joana costa tp 1 – trabalho prático www
PPTX
Lync Server 2010 administrando o Lync Server 2010
PPTX
Lync Server 2010 instalação configuração upgrade e coexistência
PPTX
Blue Systems Enterprise CMS Versão 5.0
PPT
Reutilização
PDF
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
PDF
Oficina cake php
PPTX
Apresentação do relatório final de estágio
PDF
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
PPT
Padrão Arquitetural MVC e suas aplicações para WEB
Arquitetura de sistemas web
Apresentação Facelets_UNIFEI
Framework7
Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
Arquitetura MVC
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
O rad da wave maker developing for the cloud
Framework Foundation Basicão
Joana costa tp 1 – trabalho prático www
Lync Server 2010 administrando o Lync Server 2010
Lync Server 2010 instalação configuração upgrade e coexistência
Blue Systems Enterprise CMS Versão 5.0
Reutilização
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Oficina cake php
Apresentação do relatório final de estágio
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Padrão Arquitetural MVC e suas aplicações para WEB
Anúncio

Destaque (20)

PDF
TDC2016SP - Trilha Análise de Negócios
PPTX
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - Trilha Análise de Negócios
PPTX
TDC2016SP - Trilha Análise de Negócios
PPTX
TDC2016SP - Trilha Análise de Negócios
PPTX
TDC2016SP - Trilha .NET
PPT
TDC2016SP - Trilha .NET
PDF
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool ...
PDF
TDC2016SP - Trilha Linux Embarcado
PDF
TDC2016SP - Trilha Linux Embarcado
PDF
TDC2016SP - Trilha BigData
PDF
TDC2016SP - Trilha Linux Embarcado
PPTX
TDC2016SP - Trilha BigData
PDF
TDC2016SP - Trilha Linux Embarcado
PDF
TDC2016SP - Trilha BigData
PPT
TDC2016SP - Protocolo Firmata - controle o Arduino com sua linguagem favorita
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha .NET
TDC2016SP - Trilha .NET
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool ...
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha BigData
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha BigData
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha BigData
TDC2016SP - Protocolo Firmata - controle o Arduino com sua linguagem favorita
Anúncio

Semelhante a TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js (20)

PDF
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
PPTX
IntroduçãO Ao Desenvolvimento Web 2
PDF
Rest Java One
PPTX
Introdução ao desenvolvimento web - 2 - iDez 2010
PDF
201406Carvalho
PDF
Arquitetura de Microservicos
KEY
Uma visão rápida sobre Nodejs
PDF
Diretrizes de arquitetura da STI/UFF
PDF
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
PPTX
Uaijug ADF - spring boot - microservice - Introdução
PDF
Rest Teoria E Pratica
PDF
Desenvolvimento Client-Side 2016 (BrazilJS)
PDF
Expondo APIs de back-ends legados e travados
PDF
Arquitetura e Integração de sistemas
PDF
Computadores
PDF
Front end architecture
PDF
Interoperabilidade com .NET em ambiente Mainframe
PDF
Php Conf08 Enterprise Patterns
PDF
Desenvolvimento Client-Side 2016
PDF
Soa Woa Rest
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
IntroduçãO Ao Desenvolvimento Web 2
Rest Java One
Introdução ao desenvolvimento web - 2 - iDez 2010
201406Carvalho
Arquitetura de Microservicos
Uma visão rápida sobre Nodejs
Diretrizes de arquitetura da STI/UFF
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
Uaijug ADF - spring boot - microservice - Introdução
Rest Teoria E Pratica
Desenvolvimento Client-Side 2016 (BrazilJS)
Expondo APIs de back-ends legados e travados
Arquitetura e Integração de sistemas
Computadores
Front end architecture
Interoperabilidade com .NET em ambiente Mainframe
Php Conf08 Enterprise Patterns
Desenvolvimento Client-Side 2016
Soa Woa Rest

Mais de tdc-globalcode (20)

PDF
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
PDF
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
PDF
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
PDF
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
PDF
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
PDF
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
PDF
TDC2019 Intel Software Day - Inferencia de IA em edge devices
PDF
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
PPT
Trilha .Net - Programacao funcional usando f#
PDF
TDC2018SP | Trilha Go - Case Easylocus
PDF
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
PDF
TDC2018SP | Trilha Go - Clean architecture em Golang
PDF
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
PDF
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
PDF
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
PDF
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
PDF
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
PDF
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
PDF
TDC2018SP | Trilha .Net - .NET funcional com F#
PDF
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - Inferencia de IA em edge devices
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha .Net - Programacao funcional usando f#
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core

Último (20)

PPTX
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
PPTX
Slides Lição 7, CPAD, Uma Igreja Que Não Teme A Perseguição, 3Tr25.pptx
PDF
COMO OS CONTOS DE FADAS REFLETEM ARQUÉTIPOS_MEDOS E DESEJOS DO INCONSCIENTE H...
PDF
saeb_documentos_de_referencia_versao_1.0.pdf
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PDF
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
PPTX
NR11 - Treinamento Direcao Defensiva - 2023.pptx
PDF
DAQUISIÇÃO E DESENVOLVIMENTO DA FALA 12 A 24 MESES
PDF
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
PDF
Ementa 2 semestre PEI Orientação de estudo
PPTX
MENDEL - Aula sobre Mendel - Genética EM
PPT
História e Evolução dos Computadores domésticos
PPTX
GUERRAFRIA.pptdddddddddddddddddddddddddx
PPTX
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
PPTX
HISTÓRIA DO BRASIL - anos de Democracia.pptx
PPTX
Pedagogia em Ambientes Não Escolares.pptx
PDF
Metabolismo_energético_3ano_pre_vest_2026.pdf
PDF
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
PPTX
Lição 8 EBD.pptxtudopossonaquelequemimfortalece
PPTX
O Romantismo e a identidade brasileira..
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
Slides Lição 7, CPAD, Uma Igreja Que Não Teme A Perseguição, 3Tr25.pptx
COMO OS CONTOS DE FADAS REFLETEM ARQUÉTIPOS_MEDOS E DESEJOS DO INCONSCIENTE H...
saeb_documentos_de_referencia_versao_1.0.pdf
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
NR11 - Treinamento Direcao Defensiva - 2023.pptx
DAQUISIÇÃO E DESENVOLVIMENTO DA FALA 12 A 24 MESES
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
Ementa 2 semestre PEI Orientação de estudo
MENDEL - Aula sobre Mendel - Genética EM
História e Evolução dos Computadores domésticos
GUERRAFRIA.pptdddddddddddddddddddddddddx
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
HISTÓRIA DO BRASIL - anos de Democracia.pptx
Pedagogia em Ambientes Não Escolares.pptx
Metabolismo_energético_3ano_pre_vest_2026.pdf
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
Lição 8 EBD.pptxtudopossonaquelequemimfortalece
O Romantismo e a identidade brasileira..

TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js

  • 2. Marcelo Palladino public class MarceloPalladino: SerHumano, IDesenvolvedor, IArquitetoDeSoftware @mfpalladino Henrique Sosa Front-End Developer @henriquesosa
  • 5. Arquitetura de software? "A arquitetura de software engloba o conjunto de decisões importantes sobre a organização de um sistema de software, incluindo a seleção dos elementos estruturais e as interfaces pelas quais o sistema se compõe; comportamento como especificado na colaboração entre esses elementos; composição destes elementos estruturais e comportamentais em subsistemas maiores; e um estilo de arquitetura que orienta essa organização. Arquitetura de software envolve também a funcionalidade, usabilidade, resistência, desempenho, reutilização, compreensibilidade, restrições econômicas e tecnológicas, vantagens e desvantagens e preocupações estéticas ." Philippe Kruchten, Grady Booch, Kurt Bittner, and Rich Reitman derived and refined a definition of architecture based on work by Mary Shaw and David Garlan (Shaw and Garlan 1996).
  • 6. Arquitetura de software: Flowler sendo Flowler “A indústria de software se delicia em pegar palavras e estendê-las em uma miríade de significados sutilmente contraditórios. Uma das maiores sofredoras é ‘arquitetura’.” ● A decomposição em alto nível de um sistema em suas partes. ● Decisões que são difíceis de mudar. ● No final, a arquitetura se resume a coisas importantes - seja lá o que isso signifique. Patterns of Enterprise Application Architecture, Martin Fowler.
  • 7. Alinhamento de Expectativas - Não é um tutorial sobre Cef/CefGlue - Não é uma palestra sobre React.JS - Não é um live coding - Detalhes de implementação - https://github.com/henriquesosa - https://github.com/mfpalladino
  • 8. Tomadas de decisões de arquitetura de software
  • 9. Um pouco de contextualização
  • 11. 1998 Contexto: Quem nunca? - Cliente servidor - Única aplicação de Chat no Brasil - Boom no mercado de atendimento online Operador Windows Chat WEB MSSQL *desenho simplificado da arquitetura 1.0
  • 13. 2007 Contexto: O famoso três camadas Operador Windows Chat WEBMSSQL Servidor de aplicação SOAP SOAP Aplicação *desenho simplificado da arquitetura 2.0 (três camadas)
  • 14. O problema de escalabilidade ainda persiste!
  • 15. 2011 - 2012 Problema de escala no servidor definitivamente resolvido Contexto: Microserviços - Persistência poliglota - Caches distribuídos - Filas - Processos assíncronos - Load balancers - Auto scaling
  • 17. 2015 - 2016 Um típico WindowsForms LEGADO - Uma palavra: GORDO - base de código de ~10 anos - ~150MB - 50 projetos - Alto acoplamento - Alta complexidade - … - … - Mas o principal é... Operador Windows
  • 18. Outros tipos de problemas de escala - Do ponto de vista do produto - Difícil garantir adoção de correções/melhorias - Métrica: Em média 2 anos para atualização em todos os operadores - Limitador da evolução do produto - Dificulta priorização no backlog - Do ponto de vista do desenvolvimento - O WindowsForms é antigo - Profissionais cada vez mais escassos
  • 19. Idiossincrasias do mercado de callcenters - Gestão de mudança no ambiente extremamente burocrática - Poucas “janelas” para modificação no ambiente - Grande limitação de recursos - Acesso a recursos locais - Versão .net framework - IP de saída
  • 21. Não fazer nada e pedir para sair
  • 22. Reescrever tudo - Prazo (8 meses a 1 ano) - Custo sem entrega contínua de valor - Muito tempo para concorrência agir “They did it by making the single worst strategic mistake that any software company can make: They decided to rewrite the code from scratch.” Joel Spolsky - Autor do artigo "Things You Should Never Do"
  • 23. "Dar um jeito" de entregar valor continuamente e resolver o problema
  • 24. Qual foi a forma e quais os finais esperados? - Forma - Substituir as partes da aplicação Windows por “micro” aplicações WEB - Final intermediário - Uma aplicação Windows que é apenas uma “casca” para várias aplicações WEB - Final - Uma aplicação Windows que é apenas uma “casca” para uma aplicação WEB
  • 25. Preparação - Pesquisa de casos parecidos - Palestra do Felipe Ribeiro (Spotify) na BrazilJS 2015 - Conferência com o time de desenvolvimento - Provas de conceito
  • 26. Message Bus (integrando através de mensageria) WindowsForms UserControl Message Bus WindowsForms UserControl WindowsForms UserControl WEB APP WEB APP WEB APP
  • 27. Message Bus (integrando através de mensageria) - O conteúdo da mensagem inclui informações relacionadas ao evento - O formato da mensagem define um contrato entre a aplicação Windows e as partes WEB 1 2
  • 28. Message Bus (integrando através de mensageria) - O Message Bus funciona como um "canal inteligente". - As partes "assinam" o canal para que sejam notificadas quando mensagens forem "adicionadas" 1 2
  • 29. Message Bus: Por quê? (integrando através de mensageria) A relação de "publicação" e "consumo" passa a ser naturalmente assíncrona e desacoplada!
  • 30. Desejos: - Uma aplicação Web totalmente passiva - Componentização - Facilidade para manipulação de diversos estados - Transparência
  • 32. CONTROLLER MODEL VIEW *desenho simplificado da arquitetura do Front 2.0 VIEW CONTROLLER CONTROLLER CONTROLLER MODEL MODEL
  • 34. VIEW ACTION REDUCER STORE *desenho de exemplo de recebimento de dados da aplicação Windows MESSAGE HANDLER Mensagem Front-end APLICAÇÃO WINDOWS
  • 36. Redux - Redux is a predictable state container for JavaScript apps. - Wrote by @dan_abramov - http://redux.js.org
  • 37. VIEW ACTION REDUCER STORE MESSAGE HANDLER APLICAÇÃO WINDOWS Front-end *desenho de exemplo de requisição para a aplicação Windows
  • 38. VIEW ACTION REDUCER STORE MESSAGE HANDLER APLICAÇÃO WINDOWS Mensagem Front-end *desenho de exemplo de requisição para a aplicação Windows
  • 39. VIEW ACTION REDUCER STORE MESSAGE HANDLER APLICAÇÃO WINDOWS Front-end *desenho de exemplo de requisição para a aplicação Windows
  • 40. VIEW ACTION REDUCER STORE MESSAGE HANDLER APLICAÇÃO WINDOWS Front-end *desenho de exemplo de requisição para a aplicação Windows
  • 41. VIEW ACTION REDUCER STORE MESSAGE HANDLER APLICAÇÃO WINDOWS Mensagem Front-end *desenho de exemplo de requisição para a aplicação Windows
  • 42. VIEW ACTION REDUCER STORE *desenho de exemplo de recebimento de dados da aplicação Windows MESSAGE HANDLER Mensagem Front-end APLICAÇÃO WINDOWS
  • 43. Então por que React.js?
  • 45. React.Js - A Javascript library for building user interfaces - Wrote by Instagram - Maintained by Facebook - Brand new - https://facebook.github.io/react
  • 48. Só mais uma peça do quebra- cabeças
  • 49. Chromium Embedded Framework - Framework open source que permite embedar web browser baseado no Chromium core. - https://bitbucket. org/chromiumembedded/cef Aplicação Windows Renderer 1 CEF Host Renderer “N”
  • 50. CEF um pouco mais de perto - CEF é um projeto de código aberto que permite aos desenvolvedores facilmente exibir conteúdo HTML em suas aplicações desktop. A exibição de HTML pode ser finamente controlada e até mesmo ampliado através da API disponíveis. Por baixo dos panos, a renderização do HTML é feita por meio do Chromium browser, usando a engine Blink (anteriormente WebKit) e a máquina virtual V8 JavaScript.
  • 51. CEF como framework - Como framework, o CEF fornece um conjunto de headers e uma biblioteca. Ele está disponível para Windows, Mac OSX e Linux. As APIs C++ e C estão disponíveis como parte do projeto, mas há projetos que mantêm bindings para outros ambientes como .NET, Java e Python.
  • 52. CefGlue - Binding .NET/Mono para o Chromium Embedded Framework (CEF). - https://bitbucket.org/xilium/xilium.cefglue/wiki/Home
  • 53. 1 2
  • 56. CEF: Por quê? - Tentamos usar o IE… - Mais casos de uso conhecidos com CEF
  • 57. Pontos de atenção - Contexto de thread - Menu de contexto - Log - DevTools - Memória - Um processo vs vários processos
  • 58. Pontos de atenção - Contexto de thread - Menu de contexto - Log - DevTools - Memória - Um processo vs vários processos
  • 59. Pontos de atenção - Contexto de thread - Menu de contexto - Log - DevTools - Memória - Um processo vs vários processos
  • 60. Pontos de atenção - Contexto de thread - Menu de contexto - Log - DevTools - Memória - Um processo vs vários processos
  • 61. Pontos de atenção - Contexto de thread - Menu de contexto - Log - DevTools - Memória - Um processo vs vários processos
  • 62. Conclusões - Entender a visão de longo prazo do projeto - Trabalhar com restrições econômicas - Trabalhar com restrições tecnológicas - Gerar, entender e trabalhar com base em métricas - Transitar bem entre diferentes times - Lidar com conflitos técnicos