@mauroservienti | #apiconf2018
Designing a UI for Microservices
Mauro Servienti | @mauroservienti
for Microservices Mauro Servienti | @mauroservienti @mauroservienti - - PowerPoint PPT Presentation
Designing a UI for Microservices Mauro Servienti | @mauroservienti @mauroservienti | #apiconf2018 100% remote @mauroservienti | #apiconf2018 bike rider @mauroservienti | #apiconf2018 bananas my favorite snack @mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
Designing a UI for Microservices
Mauro Servienti | @mauroservienti
@mauroservienti | #apiconf2018
100% remote
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
my favorite snack
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
Let me buy a “banana holder”
@mauroservienti | #apiconf2018
Solution Architect @ Particular Software mauro.servienti@gmail.com @mauroservienti //milestone.topics.it
@mauroservienti | #apiconf2018
Or put it in another way: does a “Product” class or aggregate exist?
@mauroservienti | #apiconf2018
“There is no spoon”
Sales Warehouse Shipping Marketing
@mauroservienti | #apiconf2018
Single Responsibility Principle
@mauroservienti | #apiconf2018
How can we design something like that?
@mauroservienti | #apiconf2018
Denormalization Temptations…
Marketing Sales Shipping Warehouse
De-normalized API Client
“Product”
ViewModel…
/products/1
@mauroservienti | #apiconf2018
<rant />
@mauroservienti | #apiconf2018
Oh…and by the way…
@mauroservienti | #apiconf2018
Whatchoo talki lkin' 'bout, , Will illis is?
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
Marketing Sales Shipping Warehouse
Client
/products/1
PK PK PK PKViewModel…
@mauroservienti | #apiconf2018
Marketing Sales Shipping Warehouse
@mauroservienti | #apiconf2018
Marketing Sales Shipping Warehouse
Doc DB + HTTP DB DB back-end back-end Web Proxy API API Proxy to 3° party API1 month cache 24 hours cache No cache 10 minutes cache
front-end component front-end component front-end component front-end componentclient shell
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
Marketing Sales Shipping Warehouse
Doc DB + HTTP DB DB back-end back-end Web Proxy API API Proxy to 3° party API front-end component front-end component front-end component front-end componentclient shell
composition gateway
Marketing Appender Sales Appender Shipping Appender Warehouse Appender@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
View model/products/1
ProductNameA € 20.00
cover image
A
Supplier AProductNameB € 20.00
cover image
B
Supplier BProductNameC € 20.00
cover image
C
Supplier CProductNameD € 20.00
cover image
D
Supplier D@mauroservienti | #apiconf2018
Component from product-catalog
View modelComponent from product-catalog
/products/1
ProductNameA € 20.00
cover image
A
Supplier AProductNameB € 20.00
cover image
B
Supplier BProductNameC € 20.00
cover image
C
Supplier CProductNameD € 20.00
cover image
D
Supplier Dload related products
@mauroservienti | #apiconf2018
client-side message broker
Component from product-catalog Component from sales Component from marketing
View modelComponent from product-catalog Component from sales Component from marketing
ProductNameA € 20.00
cover image
A
Supplier AProductNameB € 20.00
cover image
B
Supplier BProductNameC € 20.00
cover image
C
Supplier CProductNameD € 20.00
cover image
D
Supplier Dpublish `RelatedProductsFound` load related products receive event
/products/1
@mauroservienti | #apiconf2018
Component from product-catalog Component from sales Component from marketing
View modelComponent from product-catalog Component from sales Component from marketing
ProductNameA € 20.00
cover image
A
Supplier AProductNameB € 20.00
cover image
B
Supplier BProductNameC € 20.00
cover image
C
Supplier CProductNameD € 20.00
cover image
D
Supplier Dload related products
/products/1
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
@mauroservienti | #apiconf2018
//bit.ly/view-model-composition-demos
@mauroservienti | #apiconf2018