Magnolia Kickstart: Develop Magnolia Websites Faster, Better and Easier
Develop Lightning Components faster with Lightning Data...
Transcript of Develop Lightning Components faster with Lightning Data...
Develop Lightning Components faster with Lightning Data ServiceFabien Taillon – Salesforce MVP – CTO @ @FabienTaillon
Madrid 1st June 2017
Fabien TaillonSalesforce MVP
CTO @TEXEÏ
Paris Developer Group co-leader
French Touch Dreamin co-organizer
@FabienTaillon
www.fabientaillon.com
Lightning Page made of several Components
Lightning Page made of several Components
Before Lightning Data Service
Apex Controller
Markup JS Controller
Component 1
Markup JS Controller
Component 2
Markup JS Controller
Component 3
Or worse…
Apex Controller 1 Markup JS Controller
Component 1
Markup JS Controller
Component 2
Markup JS Controller
Component 3
Apex Controller 2
Apex Controller 3
3 queries to get almost the same fields
Apex Controller 1 Markup JS Controller
Component 1
Markup JS Controller
Component 2
Markup JS Controller
Component 3
Apex Controller 2
Apex Controller 3
Name, Phone, Address, MyField__c
Name, Phone, Email
Name, Address, MySecondField__c
3 queries to get almost the same fields
Apex Controller 1 Markup JS Controller
Component 1
Markup JS Controller
Component 2
Markup JS Controller
Component 3
Apex Controller 2
Apex Controller 3
Name, Phone, Address, MyField__c
Name, Phone, Email
Name, Address, MySecondField__c
With Lightning Data Service
Markup
Component 1
Markup
Component 2
Markup
Component 3
LDSController
Record Cache
Only 1 query with all the fields !
Markup
Component 1
Markup
Component 2
Markup
Component 3
LDSController
Record Cache
Name, Phone, Address, MyField__c
Name, Phone, Email
Name, Address, MySecondField__c
Name, Phone, Address, Email, MyField__c, MySecondField__c
No server call if data already in the cache
LDSController
Record Cache
Name, Phone, Address, Email,
MyField__c, MySecondField__c
Markup
Component 4
Markup
Component 1
Markup
Component 2
Markup
Component 3
Name, Phone, Address, MyField__c
Name, Phone, Email
Name, Address, MySecondField__c
From a code point of view: from this…
Apex Controller 1 Markup JS Controller
Component 1
Markup JS Controller
Component 2
Markup JS Controller
Component 3
Apex Controller 2
Apex Controller 3
To this !
Markup
Component 1
Markup
Component 2
Markup
Component 3
Apex Controller 1 JS Controller
JS Controller
JS Controller
Apex Controller 2
Apex Controller 3
To this !
Markup
Component 1
Markup
Component 2
Markup
Component 3
Apex Controller 1 JS Controller
JS Controller
JS Controller
Apex Controller 2
Apex Controller 3
To this !
Markup
Component 1
Markup
Component 2
Markup
Component 3
Apex Controller 1 JS Controller
JS Controller
JS Controller
Apex Controller 2
Apex Controller 3
To this !
Markup
Component 1
Markup
Component 2
Markup
Component 3
Apex Controller 1 JS Controller
JS Controller
JS Controller
Apex Controller 2
Apex Controller 3
Code before: Markup
Code before: Markup
Code before: Markup
Code before: JS
Code before: JS
Code before: JS
Code before: JS
Code before: Apex Class
+ TEST CLASS !
Code after: Only markup !
Code after: Only markup !
Better performances, less code !
Without Lightning Data Service
With Lightning Data Service
TEST CLASS
Markup JS Apex
Better performances, less code !
Methods: Save, Delete
Methods: Save, Delete
BenefitsNo Apex !
Security
• CRUD
• Field Level Security
Shared cache
• Less server calls → Better performances
• Record values updated across components → Coherent values displayed
• Component notified only if the field updated is used by the cmp → Less code executed
Id is used, not sObject Type → Same Component can be used for different objects
Where it’s (supposed to be) going
Out of Beta
More objects supported (ex: Opportunity isn’t supported)
List Support
Support outside of LEX/SF1 (ex: Lightning Out)
…
Q & AMadrid 1st June 2017