Share
Embed
Microfrontends
SQUER Solutions
February 22, 2019
Transcript
64 slides
-
@duffleit micro frontends a strive for fully verticalized systems _
@duffleit Dornbirn, agent.sh photo by Komail Naqvi -
@duffleit David Leitner ▪ Technical Consultant for Senacor Technologies ▪
Lecturer for post diploma courses at UAS Technikum Vienna ▪ I do a couple of things around the tech- community I‘m writing code -
@duffleit A definition of micro frontends The idea of micro
frontends is to extend the concepts of micro services to the frontend world. -
@duffleit Sam Newman: ▪ small and focused on one thing
▪ … to be autonomous ▪ That‘s it WHY we do them? Microservices * UBERHDTV - https://imgur.com/gallery/nup4lfX CVDD HDD/EDD * -
@duffleit why autonomous? ✅Independent deployments ✅Small interface surface ✅Technology agnostic
✅Based on standards ✅Autonomous operations ✅Parallel Development -
@duffleit „Microservices are stated as a contrast system to monoliths.“
Where they came from -
@duffleit DB DB DB DB DB DB DB DB DB
Independent deployments Autonomous operations Technology agnostic Based on standards Parallel Development Small interface surface -
@duffleit But wait, … our microservices have actual human users.
- Stefan Tilkov -
@duffleit The frontend is … not an implementation detail, it
is a critical part of a microservice architecture. -
@duffleit frontend platform backend platform Independent deployments Autonomous operations Technology
agnostic Based on standards Parallel Development Small interface surface a frontend monolith was born a micro frontend TO THE RESCUE Independent deployments Autonomous operations Technology agnostic Based on standards Parallel Development Small interface surface -
@duffleit Flavour #1: Hyperlink Integration frontend platform backend platform Catalogue
Ordering Payment Shipping hyperlink hyperlink hyperlink -
@duffleit Flavour #1: Breaking service boundaries frontend platform backend platform
Products Ordering Payment Shipping Dash board -
@duffleit Flavour #1: Backend for Frontend frontend platform backend platform
Products Ordering Payment Shipping Dash board BFF BFF BFF BFF BFF samnewman.io/patterns/architectural/bff/ -
@duffleit Flavour #1: Hyperlink Integration Independent deployments Autonomous operations Technology
agnostic Parallel Development -
@duffleit Flavour #1: Reusage Problem frontend platform backend platform Catalogue
Ordering Payment Shipping hyperlink hyperlink hyperlink Navigation Navigation Navigation -
@duffleit Flavour #1: Hyperlink Integration Independent deployments Autonomous operations Technology
agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading -
@duffleit Flavour #2: Build Time Integration BUNDLED FRONTED UI-Shared-Stuff (e.g.
SPA-Framework, Components, Routing) Mono Repo -
@duffleit MonoRepo Simplifies dependency management. Allows extensive code sharing and
reuse. package.json Shared resources (assets, components…) repository -
@duffleit Flavour #2: Build Time Integration Independent deployments Autonomous operations
Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading* BUNDLED FRONTED UI-Shared-Stuff (e.g. SPA-Framework, Components) -
@duffleit Flavour #3: Transclusion BUNDLED FRONTED UI-Shared-Stuff (e.g. SPA-Framework, Components)
The bundling is done by the webserver. -
@duffleit Flavour #3: Server Side Includes or Edge Side Includes
<html> <body> <!--#include virtual="/products" --> <!--#include virtual="/payments" --> <!--#include virtual="/dashboard" --> <!--#include virtual="/shipping" --> </body> </html> -
@duffleit Flavour #3: Transclusion Independent deployments Autonomous operations Technology agnostic
Parallel Development A consistent UI/UX Smooth user interaction Fast loading BUNDLED FRONTED UI-Shared-Stuff (e.g. SPA-Framework, Components) -
@duffleit Flavour #4: App Shell Integration APP SHELL Header Footer
The aggregation is done on the client. -
@duffleit Flavour #4: App Shell Integration Independent deployments Autonomous operations
Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading APP SHELL Header Footer -
@duffleit Flavour #5: Metaframework Route-based modularisation is handled by a
Metaframework Metaframework /catalogue /checkout -
@duffleit /catalogue /checkout APP SHELL Header Footer A matter of
modularisation Hyperlink Integration App Shell Integration Metaframework -
@duffleit Flavour #5: Metaframework Route-based modularisation is handled by a
Metaframework Metaframework /catalogue /checkout -
@duffleit • they are implemented with iframes. • or start
using web components now. Flavour #5: Technology agnostic -
@duffleit Flavour #5: Metaframework Metaframework /catalogue /checkout Independent deployments Autonomous
operations Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading -
@duffleit „a consistent UI“ 1) CDN – for static files
2) CMS – for static content 3) A Component Library -
@duffleit „a component library in code“ SPA-C SPA-B SPA-A component
library Time Effort 2019 2020 2021 component library component library a promise that you will save time in the future by reusage. you introduce a dependency between your projects. copy & own -
@duffleit >> A little copying is better than a little
dependency. Rob Pike -
@duffleit „a component library“ If you really need a component
library, then build it framework agnostic. If Angular can be ignored JSX + CSS Modules worked good for us. And, of course web components. -
@duffleit Web Components in 2019 Think they do What they
really do Say they do what people… * If you have real world project experience with a web-component based component library which is running in production, let’s chat afterwards – I pay the beer. -
@duffleit a design system > component library png component Even
if something has to look equal, it does not have to be technically the same. Source of truth Technical Representation -
@duffleit Flavour #5: Metaframework Metaframework /catalogue /checkout Independent deployments Autonomous
operations Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading -
@duffleit Hyperlink Integration Build Time Integration Transclusion App Shell Integration
Metaframework the agony of choice -
@duffleit A general decision advice Your application is big?* The
need for smooth user interaction Build Time Integration Hyperlink Integration Strongly Independent UI/Domain Parts Complex modularisation needed Transclusion App Shell Integration Meta- Framework * an application is big enough to justify using micro frontends, if slight UI/UX differences between the two most unrelated subpages are acceptable. Yes No -
@duffleit Compose your perfect MIX Landing Shop Ordering hyperlink hyperlink
APP SHELL Header Footer <!–- SSIs --> <!--#include … --> <!--#include … --> -
@duffleit Key-Takeaways „Think twice if a frontend monolith does not
fit your needs and start with a monolith first approach.“ -
@duffleit Key-Takeaways „the 8 facilities of distributed computing are called
facilities for a reason“ -
@duffleit Key-Takeaways „Consider the frontend as part of your microservice
architecture – and solve UI specific problems with UI specific solutions.“