Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣...
Transcript of Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣...
![Page 1: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/1.jpg)
MICRO FRONTENDSEVOLUINDO SUA APLICAÇÃO UTILIZANDO
![Page 2: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/2.jpg)
‣ Analista de Sistemas na Take;
‣ Formado em Sistemas de Informação pela PUC Minas;
‣ Professor de pós-graduação na PUC Minas nos cursos de Node.js e React + Angular;
SAMUEL MARTINS
![Page 3: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/3.jpg)
CENÁRIO HIPOTÉTICO
![Page 4: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/4.jpg)
![Page 5: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/5.jpg)
STACK
‣ AngularJs;
‣ Arquitetura MVVM (Model, View e View Model);
‣ ~50k linhas de código;
‣ Aplicação totalmente monolítica, todo o código no mesmo repositório;
‣ ~3 times com ~3 front-enders cada.
![Page 6: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/6.jpg)
![Page 7: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/7.jpg)
DIFICULDADES
![Page 8: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/8.jpg)
‣ Comunidade abandonou o AngularJs; ‣ Componentes/diretivas abandonadas. Pull requests nem são olhados; ‣ Documentação do AngularJs abandonada e bem ruim; ‣ Componentes difíceis de testar; ‣ Alta curva de aprendizado para novos integrantes time; ‣ Services do angular não favorecem o reaproveitamento de código.
![Page 9: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/9.jpg)
‣ Falta de autonomia dos times; ‣ Deploys são mais sucetíveis a falhas; ‣ Deploy fica cada vez mais demorado; ‣ Aplicação totalmente amarrada a uma tecnologia;
E MAIS…
![Page 10: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/10.jpg)
ECOSSISTEMA FRONTEND EM CONSTANTE EVOLUÇÃO
![Page 11: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/11.jpg)
O QUE FAZER DIANTE DESSE CENÁRIO?
![Page 12: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/12.jpg)
1ª OPÇÃO
![Page 13: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/13.jpg)
DEIXAR COMO ESTÁ E IR EMBORA
![Page 14: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/14.jpg)
2ª OPÇÃO
![Page 15: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/15.jpg)
![Page 16: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/16.jpg)
![Page 17: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/17.jpg)
DIFICULDADES
‣ Refazer toda a lógica de negócio pode não ser viável;
‣ Todos os bugs resolvidos teriam que ser retestados;
‣ Falta de mão-de-obra;
![Page 18: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/18.jpg)
‣ Desistir e ir embora;
‣ Refatorar tudo;
![Page 19: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/19.jpg)
3ª OPÇÃO
![Page 20: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/20.jpg)
REFATORAR GRADATIVAMENTE PARA UM NOVO FRAMEWORK
![Page 21: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/21.jpg)
DIFICULDADES
‣ Manter dois frameworks numa mesma base de código;
‣ Aplicação amarrada a um novo framework;
‣ Compartilhar informações entre as partes pode ser complicado.
![Page 22: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/22.jpg)
‣ Desistir e ir embora;
‣ Refatorar tudo;
‣ Migrar gradativamente para um novo framework;
![Page 23: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/23.jpg)
4ª OPÇÃO
![Page 24: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/24.jpg)
UTILIZAR MICRO FRONTENDS
![Page 25: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/25.jpg)
![Page 26: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/26.jpg)
MAS AFINAL, O QUE É UM MICRO FRONTEND?
![Page 27: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/27.jpg)
‣Não é um framework;
‣Não é uma biblioteca;
‣Não é uma extensão;
‣Não é magia;
![Page 28: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/28.jpg)
É UM ESTILO ARQUITETURAL
![Page 29: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/29.jpg)
‣ Baixo ou nenhum acoplamento;
‣ Alta coesão;
‣ Não deve assumir responsabilidades de outro micro frontend;
‣ Não deve interferir ou ser interferido por outro micro frontend;
‣ Base de código independente;
‣ Pipeline de build, test e deploys separados e indepentendes;
![Page 30: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/30.jpg)
![Page 31: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/31.jpg)
Fonte: https://martinfowler.com/articles/micro-frontends.html
![Page 32: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/32.jpg)
BENEFÍCIOS
![Page 33: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/33.jpg)
‣ Modernização da aplicação sem a necessidade de jogar tudo fora;
‣ Aplicação totalmente agnóstica de novas tecnologias;
‣ Migração gradativa do código legado;
‣ Pipeline de build, test e deploys mais rápida;
‣ Maior tolerância a falhas;
‣ Separação de micro frontends por times.
![Page 34: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/34.jpg)
![Page 35: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/35.jpg)
BELEZA, MAS #COMOFAZ?
![Page 36: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/36.jpg)
PACOTES NPM SEPARADOS
{
"name": “@my-project/main”,
"version": "1.0.0",
"description": “My amazing application",
"dependencies": {
“@my-project/frontend-1“: “1.0.0”,
“@my-project/frontend-2“: “1.0.0”,
“@my-project/frontend-3“: “1.0.0”,
}
}
![Page 37: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/37.jpg)
✓ Baixo ou nenhum acoplamento;
✓ Alta coesão;
✓Não deve assumir responsabilidades de outro micro frontend;
✓Não deve interferir ou ser interferido por outro micro frontend;
✓ Base de código independente;
- Pipeline de build, test e deploys separados independentes;
![Page 38: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/38.jpg)
WEB COMPONENTS
// /about page
<div id="container">
<about-micro-frontend></about-micro-frontend>
</div>
// /products page
<div id="container">
<products-micro-frontend></products-micro-frontend>
</div>
![Page 39: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/39.jpg)
WEB COMPONENTS{
"name": "@my-project/web-components",
"version": "1.0.0",
"description": "My amazing application",
"dependencies": {
"@my-project/about-micro-frontend": "1.0.0",
"@my-project/products-micro-frontend": "1.0.0"
}
}
![Page 40: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/40.jpg)
WEB COMPONENTS
<script src="https://about.project.com/bundle.js"></script>
<script src="https://products.project.com/bundle.js"></script>
// /about page
<div id="container">
<about-micro-frontend></about-micro-frontend>
</div>
// /products page
<div id="container">
<products-micro-frontend></products-micro-frontend>
</div>
![Page 41: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/41.jpg)
✓ Baixo ou nenhum acoplamento;
✓ Alta coesão;
✓Não deve assumir responsabilidades de outro micro frontend;
✓Não deve interferir ou ser interferido por outro micro frontend;
✓ Base de código independente;
✓ Pipeline de build, test e deploys separados independentes;
- Rotas “filhas" é um problema
![Page 42: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/42.jpg)
IFRAMES
// /about page
<div id="container">
<iframe src="https://about.project.com"></iframe>
</div>
// /products page
<div id="container">
<iframe src="https://products.project.com"></iframe>
</div>
![Page 43: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/43.jpg)
✓ Baixo ou nenhum acoplamento;
✓ Alta coesão;
✓Não deve assumir responsabilidades de outro micro frontend;
✓Não deve interferir ou ser interferido por outro micro frontend;
✓ Base de código independente;
✓ Pipeline de build, test e deploys separados independentes;
✓ Rotas “filhas" é um problema.
![Page 44: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/44.jpg)
version: '2' services: micro-frontend-1: container_name: micro-frontend-docs-page build: docs-page networks: - local-network environment: - NODE_ENV=production - PORT=5000
micro-frontend-nginx: container_name: micro-frontend-nginx build: nginx volumes: - ./assets:/var/www ports: - "8888:80" networks: - local-network depends_on: - micro-frontend-1
DOCKER + KUBERNETES
![Page 45: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/45.jpg)
DESAFIOS
‣ Comunicação entre partes da aplicação pode ser complicada;
‣ Aumento da complexidade da aplicação;
‣ Maior curva de aprendizado para novos integrantes do time.
![Page 46: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/46.jpg)
/**
* Send message to parent iframe or to specified window
* @param payload
* @param element
*/
public sendMessage(payload: IMessagePayload): Promise<any> {
const message = this.formatPayload(payload)
const deferred = createDeferred()
this.createPromiseCache(message.trackingProperties.id, deferred)
this.targetWindow.postMessage(message, '*')
return deferred.promise
}
![Page 47: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/47.jpg)
init(): void { this.handleOnReceiveMessage = this.onReceiveMessage.bind(this) window.addEventListener('message', this.handleOnReceiveMessage) }
onReceiveMessage(message: MessageEvent) { const action = message.data
switch(action) { case 'a': doThis(); break; case 'b': doThat(); break; default: throw new Error('Unrecognized action') } }
Fonte: https://github.com/takenet/iframe-message-proxy
![Page 48: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/48.jpg)
"TUDO É SOBRE SAIR DA ZONA DE CONFORTO”
Samuel Martins
![Page 49: Evoluindo suas aplicações utilizando micro frontends...2019/06/14 · ‣ AngularJs; ‣ Arquitetura MVVM (Model, View e View Model); ‣ ~50k linhas de código; ‣ Aplicação](https://reader030.fdocumentos.com/reader030/viewer/2022041106/5f0818fa7e708231d42052c3/html5/thumbnails/49.jpg)
OBRIGADO!