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

63
Revitalizando aplicações Windows Usando Cef/CefGlue, Message Bus e React.JS

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

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

Revitalizando aplicações WindowsUsando Cef/CefGlue, Message Bus e React.JS

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

Marcelo Palladinopublic class MarceloPalladino: SerHumano,

IDesenvolvedor, IArquitetoDeSoftware@mfpalladino

Henrique SosaFront-End Developer

@henriquesosa

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

Comunidades!- Inovação em SaaS- ReactSP

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

Disclaimer

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

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).

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

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.

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

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

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

Tomadas de decisões de arquitetura de software

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

Um pouco de contextualização

Page 10: TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js
Page 11: 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

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

Problema: Não escala!

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

2007

Contexto: O famoso três camadas

Operador Windows

Chat WEBMSSQL

Servidor deaplicação

SOAP

SOAP

Aplicação

*desenho simplificado da arquitetura 2.0 (três camadas)

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

O problema de escalabilidade ainda persiste!

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

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

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

Operador Windows

Chat WEB

MSSQL

Servidor deaplicaçã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)

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

2015 - 2016Um 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

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

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

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

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

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

Respostas de arquitetura

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

Não fazer nada e pedir para sair

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

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"

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

"Dar um jeito" de entregar valor continuamente e resolver o problema

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

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

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

Preparação- Pesquisa de casos parecidos- Palestra do Felipe Ribeiro (Spotify) na BrazilJS 2015

- Conferência com o time de desenvolvimento

- Provas de conceito

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

Message Bus(integrando através de mensageria)

WindowsForms UserControl

Message Bus

WindowsForms UserControl

WindowsForms UserControl

WEB APP WEB APP WEB APP

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

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

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

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

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

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!

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

Desejos:

- Uma aplicação Web totalmente passiva

- Componentização- Facilidade para manipulação

de diversos estados- Transparência

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

CONTROLLER

MODELVIEW

*desenho simplificado da arquitetura do Front 1.0

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

CONTROLLER

MODEL

VIEW

*desenho simplificado da arquitetura do Front 2.0

VIEW

CONTROLLER

CONTROLLER

CONTROLLER

MODEL

MODEL

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

Problema: Não escala!

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

VIEW ACTION REDUCER STORE

*desenho de exemplo de recebimento de dados da aplicação Windows

MESSAGE HANDLER

Men

sage

m

Front-end

APLICAÇÃOWINDOWS

Page 35: TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js
Page 36: 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

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

VIEW ACTION REDUCER STORE

MESSAGE HANDLER

APLICAÇÃOWINDOWS

Front-end

*desenho de exemplo de requisição para a aplicação Windows

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

VIEW ACTION REDUCER STORE

MESSAGE HANDLER

APLICAÇÃOWINDOWS

Men

sage

m

Front-end

*desenho de exemplo de requisição para a aplicação Windows

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

VIEW ACTION REDUCER STORE

MESSAGE HANDLER

APLICAÇÃOWINDOWS

Front-end

*desenho de exemplo de requisição para a aplicação Windows

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

VIEW ACTION REDUCER STORE

MESSAGE HANDLER

APLICAÇÃOWINDOWS

Front-end

*desenho de exemplo de requisição para a aplicação Windows

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

VIEW ACTION REDUCER STORE

MESSAGE HANDLER

APLICAÇÃOWINDOWS

Mensagem

Front-end

*desenho de exemplo de requisição para a aplicação Windows

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

VIEW ACTION REDUCER STORE

*desenho de exemplo de recebimento de dados da aplicação Windows

MESSAGE HANDLER

Men

sage

m

Front-end

APLICAÇÃOWINDOWS

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

Então por que React.js?

Page 44: TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js
Page 45: 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

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

React.Js

Componentização

PAGE

LIST HEADERSEARCH

LIST ITEM

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

React.Js

VelocidadePAGE

LIST

HEADER

SEARCH

LIST ITEM

LIST LIST ITEM

LIST ITEM

State

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

Só mais uma peça do quebra-cabeças

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

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”

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

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.

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

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.

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

CefGlue- Binding .NET/Mono para o Chromium Embedded Framework (CEF).- https://bitbucket.org/xilium/xilium.cefglue/wiki/Home

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

1

2

Page 54: TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js
Page 55: TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e React.js
Page 56: 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

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

Pontos de atenção

- Contexto de thread - Menu de contexto- Log- DevTools- Memória- Um processo vs vários

processos

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

Pontos de atenção

- Contexto de thread - Menu de contexto- Log- DevTools- Memória- Um processo vs vários

processos

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

Pontos de atenção

- Contexto de thread - Menu de contexto- Log- DevTools- Memória- Um processo vs vários

processos

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

Pontos de atenção

- Contexto de thread - Menu de contexto- Log- DevTools- Memória- Um processo vs vários

processos

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

Pontos de atenção

- Contexto de thread - Menu de contexto- Log- DevTools- Memória- Um processo vs vários

processos

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

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

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

Obrigado!