SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Adobe Experience Manager
AEM Developer Meetup
Utrecht, September 3rd 2015
@GabrielWalt, Product Manager
Development Best Practices
Adobe Experience Manager
Best Practices…
Best practices are useful reference points, but they must come with a warning
label : The more you rely on external intelligence, the less you will value an
internal idea.
And this is the age of the idea.
― Gyan Nagpal
Adobe Experience Manager
Best Practices…
Practices that lead to more efficiency
• Less project effort
• Less operational effort
• Less maintenance effort
Automotive assembly line, ca. 1920
Adobe Experience Manager
Separation of Concerns
Java Developer
– Java/OSGi
– Business logic
Front-end Developer
– HTML
– CSS/JS
Adobe Experience Manager
Design

HTML/CSS
Component
Business

Logic
Inefficient
Static HTML being

handed over…
Front-end Developer
– HTML
– CSS/JS
Java Developer
– Java/OSGi
– Business logic
Separation of Concerns
Adobe Experience Manager
Design

HTML/CSS
Component
Business

Logic
Front-end Developer
– HTML
– CSS/JS
Java Developer
– Java/OSGi
– Business logic
Efficient
APIs to OSGi bundles
Separation of Concerns
Adobe Experience Manager
§1 – Separating concerns
http://docs.adobe.com/content/docs/en/aem/6-1/develop/sightly.html
Adobe Experience Manager
<a href="${properties.link}" data-sly-test="${properties.jcr:title}">

${properties.jcr:title}

</a>
Sightly Template Language
• Code-less language, forcing strict separation of concerns
• Powerful extension points with the Use-API
• Automatic contextual HTML escaping and XSS protection
• Automatically removes HTML attributes if value is empty
• Reuses HTML blocks for statements
• On-par performance and scalability with JSP
Adobe Experience Manager
Initializes a helper object.

<div data-sly-use.logic="logic.js">${logic.hi}</div>
Output:

<div>Hello World</div>








Use Statement
Adobe Experience Manager
<!-- template.html -->

<div data-sly-use.logic="logic.js">${logic.hi}</div>

/* logic.js */

use(function () {

return {

hi: "Hello World"

};

});
Server-side JavaScript logic
Adobe Experience Manager
<!-- template.html -->

<div data-sly-use.logic="com.myorg.foo.Logic">${logic.hi}</div>
/* Logic.java in OSGi bundle */

package com.myorg.foo;

import javax.annotation.PostConstruct;

import org.apache.sling.api.resource.Resource;

import org.apache.sling.models.annotations.Model;
@Model(adaptables = Resource.class)

public class Logic {

private String hi;
@PostConstruct

protected void init() {

hi = "Hello World";

}
public String getHi() {

return hi;

}

}
Javalogic
AdaptablewithSlingModels
The Use-API accepts classes that are
adaptable from Resource or Request.
Adobe Experience Manager
Model logic

This logic is not tied to a template and is potentially reusable among components.

It should aim to form a stable API that changes little, even in case of a full redesign.
➔ Java located in OSGi bundle
View logic

This logic is specific to the templates and is likely to change if the design changes.

It is thus a good practice to locate it in the content repository, next to the template.
➔ JavaScript located in component 

If components are to be maintained by front-end devs (typically with Brackets).
➔ Java located in component

If performance is critical (e.g. when many requests are not cached by the dispatcher).
What kind of Use-API?
Adobe Experience Manager
Start simple: first, no code!
OSGi (Model)
Resource
API
Page
API
Content Repository
Component (View)Content Structure
sling:
resourceType
Resource Template
– Sling plays the role of the controller
and resolves the sling:resourceType,
deciding which component will
render the accessed resource.
– The component plays the role of the
view and it’s Sightly template builds
the corresponding markup.
– The Resource and Page APIs play the
role of the model, which are available
from the template as variables.
Adobe Experience Manager
Add logic only where needed
– Model Logic is
needed only if the
logic to access the
data is different to
what existing APIs
provide.
– View Logic is
needed only when
the template needs
additional data
preparation.
OSGi (Model)
Resource
API
Page
API
Model Logic
Content Repository
Component (View)Content Structure
sling:
resourceType data-sly-use
Resource Template View Logic
Adobe Experience Manager
§2 – Enabling the Java Developer
• Getting started

The AEM Project Archetype
• Working efficiently

The AEM Developer Tools
Adobe Experience Manager
AEM Project Archetype
Adobe Experience Manager
Adobe Experience Manager
AEM Project Archetype
https://github.com/Adobe-Marketing-Cloud/aem-project-archetype
Creates a new project with latest best practices prepared
• Separate project structure for bundles, apps, content and tests.
• Sightly components super-typed in apps with corresponding client-libraries.
• OSGi config folder, asset d&d, device emulator, dictionary structure.
• Bundle examples for Sling Models, Servlets, Filters and Schedulers.
• Unit tests, integration tests, and client-side Hobbes tests with dev mode.
Adobe Experience Manager
AEM Developer Tools
Adobe Experience Manager
AEM Developer Tools
https://docs.adobe.com/docs/en/dev-tools/aem-eclipse.html
Gets new Java developers quickly efficient with AEM
• Simple bootstrap of AEM projects via a specific Project Creation Wizard.
• Easy synchronization for both content and OSGI bundles.
• Seamless integration with AEM instances through Eclipse Server Connector.
• Debugging support with code hot-swaping capabiliby.
• JCR properties edition.
Adobe Experience Manager
AEM Developer Tools Sync
Revision Control
(git, svn, etc.)
File System
Content
Repository
Work on file system + transparent sync & content editing
sync
manual pull
Brackets / Eclipse
IDE
auto push
IDE works on

the File System
Adobe Experience Manager
§3 – Enabling the Front-End Dev
• Efficiently converting designs to web

Brackets and the Extract extension
• Working efficiently on AEM projects

Brackets and the AEM extension
Adobe Experience Manager
Brackets
Adobe Experience Manager
Adobe Experience Manager
Brackets
https://docs.adobe.com/docs/en/dev-tools/aem-brackets.html
Brackets and the Extract extension
• Photoshop file support to extract information from a PSD file.
• Code hints from the PSD, to easily reuse this extracted information in the code.
• CSS preprocessor support, like LESS and SCSS.
• And hundreds of additional extensions that cover more specific needs.
Adobe Experience Manager
Brackets
https://docs.adobe.com/docs/en/dev-tools/aem-brackets.html
Brackets and the AEM extension
• Automated synchronization of changed files to the AEM development instance.
• Manual bidirectional synchronization of files and folders.
• Full content-package synchronization of the project.
• Sightly code completion for expressions and data-sly-* block statements.
Adobe Experience Manager
Additional words of wisdom
• Milage may vary, cultivate critical thinking.
• Don’t mix concerns, stick to the language of the file extension.
• Resist complexity, over-architecting is just moving the problem.
• Keep it simple, it’s just a web server.
Adobe Experience Manager
Thank you!
Developer tools:
– Project Archetype

https://github.com/Adobe-Marketing-Cloud/aem-project-archetype
– AEM Eclipse Extension

https://docs.adobe.com/docs/en/dev-tools/aem-eclipse.html
– AEM Brackets Extension

https://docs.adobe.com/docs/en/dev-tools/aem-brackets.html
– Sightly Template Language

http://www.slideshare.net/GabrielWalt/component-development
– Sightly REPL Tool

https://github.com/Adobe-Marketing-Cloud/aem-sightly-repl
– Sightly TodoMVC Example

https://github.com/Adobe-Marketing-Cloud/aem-sightly-sample-todomvc
AEM Best Practices for Component Development

Weitere ähnliche Inhalte

Was ist angesagt?

HTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowHTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowPrabhdeep Singh
 
Sling models by Justin Edelson
Sling models by Justin Edelson Sling models by Justin Edelson
Sling models by Justin Edelson AEM HUB
 
Rest and Sling Resolution
Rest and Sling ResolutionRest and Sling Resolution
Rest and Sling ResolutionDEEPAK KHETAWAT
 
SPA Editor - Adobe Experience Manager Sites
SPA Editor - Adobe Experience Manager SitesSPA Editor - Adobe Experience Manager Sites
SPA Editor - Adobe Experience Manager SitesGabriel Walt
 
Aem dispatcher – tips & tricks
Aem dispatcher – tips & tricksAem dispatcher – tips & tricks
Aem dispatcher – tips & tricksAshokkumar T A
 
AEM Asset and Tag API
AEM Asset and Tag APIAEM Asset and Tag API
AEM Asset and Tag APILokesh BS
 
Modernizing Adobe Experience Manager (AEM)
Modernizing Adobe Experience Manager (AEM)Modernizing Adobe Experience Manager (AEM)
Modernizing Adobe Experience Manager (AEM)Gabriel Walt
 
Dynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEMDynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEMBojana Popovska
 
Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6DEEPAK KHETAWAT
 
Understanding Sling Models in AEM
Understanding Sling Models in AEMUnderstanding Sling Models in AEM
Understanding Sling Models in AEMAccunity Software
 
AEM Rich Text Editor (RTE) Deep Dive
AEM Rich Text Editor (RTE) Deep DiveAEM Rich Text Editor (RTE) Deep Dive
AEM Rich Text Editor (RTE) Deep DiveHanish Bansal
 
Heap Dump Analysis - AEM: Real World Issues
Heap Dump Analysis - AEM: Real World IssuesHeap Dump Analysis - AEM: Real World Issues
Heap Dump Analysis - AEM: Real World IssuesKanika Gera
 
Modernising AEM Sites Codebase (AEM Meetup 2019)
Modernising AEM Sites Codebase  (AEM Meetup 2019)Modernising AEM Sites Codebase  (AEM Meetup 2019)
Modernising AEM Sites Codebase (AEM Meetup 2019)Hanish Bansal
 
The Evolution of Airbnb's Frontend
The Evolution of Airbnb's FrontendThe Evolution of Airbnb's Frontend
The Evolution of Airbnb's FrontendSpike Brehm
 
Angular Introduction By Surekha Gadkari
Angular Introduction By Surekha GadkariAngular Introduction By Surekha Gadkari
Angular Introduction By Surekha GadkariSurekha Gadkari
 

Was ist angesagt? (20)

HTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowHTL(Sightly) - All you need to know
HTL(Sightly) - All you need to know
 
Sling models by Justin Edelson
Sling models by Justin Edelson Sling models by Justin Edelson
Sling models by Justin Edelson
 
Rest and Sling Resolution
Rest and Sling ResolutionRest and Sling Resolution
Rest and Sling Resolution
 
Sling Models Overview
Sling Models OverviewSling Models Overview
Sling Models Overview
 
SPA Editor - Adobe Experience Manager Sites
SPA Editor - Adobe Experience Manager SitesSPA Editor - Adobe Experience Manager Sites
SPA Editor - Adobe Experience Manager Sites
 
Sightly - Part 2
Sightly - Part 2Sightly - Part 2
Sightly - Part 2
 
Aem dispatcher – tips & tricks
Aem dispatcher – tips & tricksAem dispatcher – tips & tricks
Aem dispatcher – tips & tricks
 
AEM Asset and Tag API
AEM Asset and Tag APIAEM Asset and Tag API
AEM Asset and Tag API
 
Modernizing Adobe Experience Manager (AEM)
Modernizing Adobe Experience Manager (AEM)Modernizing Adobe Experience Manager (AEM)
Modernizing Adobe Experience Manager (AEM)
 
Dynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEMDynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEM
 
Osgi
OsgiOsgi
Osgi
 
Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6
 
Understanding Sling Models in AEM
Understanding Sling Models in AEMUnderstanding Sling Models in AEM
Understanding Sling Models in AEM
 
AEM Rich Text Editor (RTE) Deep Dive
AEM Rich Text Editor (RTE) Deep DiveAEM Rich Text Editor (RTE) Deep Dive
AEM Rich Text Editor (RTE) Deep Dive
 
Heap Dump Analysis - AEM: Real World Issues
Heap Dump Analysis - AEM: Real World IssuesHeap Dump Analysis - AEM: Real World Issues
Heap Dump Analysis - AEM: Real World Issues
 
Aem Training Tutorials for Beginners
Aem  Training Tutorials for BeginnersAem  Training Tutorials for Beginners
Aem Training Tutorials for Beginners
 
Angular
AngularAngular
Angular
 
Modernising AEM Sites Codebase (AEM Meetup 2019)
Modernising AEM Sites Codebase  (AEM Meetup 2019)Modernising AEM Sites Codebase  (AEM Meetup 2019)
Modernising AEM Sites Codebase (AEM Meetup 2019)
 
The Evolution of Airbnb's Frontend
The Evolution of Airbnb's FrontendThe Evolution of Airbnb's Frontend
The Evolution of Airbnb's Frontend
 
Angular Introduction By Surekha Gadkari
Angular Introduction By Surekha GadkariAngular Introduction By Surekha Gadkari
Angular Introduction By Surekha Gadkari
 

Ähnlich wie AEM Best Practices for Component Development

Implementing a Symfony Based CMS in a Publishing Company
Implementing a Symfony Based CMS in a Publishing CompanyImplementing a Symfony Based CMS in a Publishing Company
Implementing a Symfony Based CMS in a Publishing CompanyMarcos Labad
 
Google app development
Google app developmentGoogle app development
Google app developmentAurel Medvegy
 
Google app developers
Google app developersGoogle app developers
Google app developersAurel Medvegy
 
Web software development
Web software developmentWeb software development
Web software developmentAurel Medvegy
 
Google app developer
Google app developerGoogle app developer
Google app developerAurel Medvegy
 
Google apps development
Google apps developmentGoogle apps development
Google apps developmentAurel Medvegy
 
Google app engine developer
Google app engine developerGoogle app engine developer
Google app engine developerAurel Medvegy
 
Cloud computing providers
Cloud computing providersCloud computing providers
Cloud computing providersAurel Medvegy
 
Google app programming
Google app programmingGoogle app programming
Google app programmingAurel Medvegy
 
App engine applications
App engine applicationsApp engine applications
App engine applicationsAurel Medvegy
 
Google app engine example apps
Google app engine example appsGoogle app engine example apps
Google app engine example appsAurel Medvegy
 
App engine domain name
App engine domain nameApp engine domain name
App engine domain nameAurel Medvegy
 
Google app engine applications
Google app engine applicationsGoogle app engine applications
Google app engine applicationsAurel Medvegy
 

Ähnlich wie AEM Best Practices for Component Development (20)

Implementing a Symfony Based CMS in a Publishing Company
Implementing a Symfony Based CMS in a Publishing CompanyImplementing a Symfony Based CMS in a Publishing Company
Implementing a Symfony Based CMS in a Publishing Company
 
Google app development
Google app developmentGoogle app development
Google app development
 
Google app developers
Google app developersGoogle app developers
Google app developers
 
Google development
Google developmentGoogle development
Google development
 
Google app
Google appGoogle app
Google app
 
Web software development
Web software developmentWeb software development
Web software development
 
Google app developer
Google app developerGoogle app developer
Google app developer
 
Google web tools
Google web toolsGoogle web tools
Google web tools
 
Google apps development
Google apps developmentGoogle apps development
Google apps development
 
Google app pricing
Google app pricingGoogle app pricing
Google app pricing
 
Google app engine developer
Google app engine developerGoogle app engine developer
Google app engine developer
 
Cloud computing providers
Cloud computing providersCloud computing providers
Cloud computing providers
 
Google app software
Google app softwareGoogle app software
Google app software
 
Google app programming
Google app programmingGoogle app programming
Google app programming
 
App engine applications
App engine applicationsApp engine applications
App engine applications
 
Google app engine example apps
Google app engine example appsGoogle app engine example apps
Google app engine example apps
 
App engine domain name
App engine domain nameApp engine domain name
App engine domain name
 
Google app engine applications
Google app engine applicationsGoogle app engine applications
Google app engine applications
 
Web 2.0 development
Web 2.0 developmentWeb 2.0 development
Web 2.0 development
 
Google android
Google androidGoogle android
Google android
 

Mehr von Gabriel Walt

Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
Managing Omnichannel Experiences with Adobe Experience Manager (AEM)Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
Managing Omnichannel Experiences with Adobe Experience Manager (AEM)Gabriel Walt
 
CQ Provisionning & Authoring
CQ Provisionning & AuthoringCQ Provisionning & Authoring
CQ Provisionning & AuthoringGabriel Walt
 
Web, Mobile, App and Back!
Web, Mobile, App and Back!Web, Mobile, App and Back!
Web, Mobile, App and Back!Gabriel Walt
 
Optimizing HTML5 Sites with CQ5/WEM
Optimizing HTML5 Sites with CQ5/WEMOptimizing HTML5 Sites with CQ5/WEM
Optimizing HTML5 Sites with CQ5/WEMGabriel Walt
 
Three WEM Dev Tricks
Three WEM Dev TricksThree WEM Dev Tricks
Three WEM Dev TricksGabriel Walt
 
Web Apps atop a Content Repository
Web Apps atop a Content RepositoryWeb Apps atop a Content Repository
Web Apps atop a Content RepositoryGabriel Walt
 

Mehr von Gabriel Walt (9)

Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
Managing Omnichannel Experiences with Adobe Experience Manager (AEM)Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
Managing Omnichannel Experiences with Adobe Experience Manager (AEM)
 
CQ Provisionning & Authoring
CQ Provisionning & AuthoringCQ Provisionning & Authoring
CQ Provisionning & Authoring
 
Web, Mobile, App and Back!
Web, Mobile, App and Back!Web, Mobile, App and Back!
Web, Mobile, App and Back!
 
Drive dam
Drive damDrive dam
Drive dam
 
Optimizing HTML5 Sites with CQ5/WEM
Optimizing HTML5 Sites with CQ5/WEMOptimizing HTML5 Sites with CQ5/WEM
Optimizing HTML5 Sites with CQ5/WEM
 
CQ 5.4 Deep-Dive
CQ 5.4 Deep-DiveCQ 5.4 Deep-Dive
CQ 5.4 Deep-Dive
 
Crx 2.2 Deep-Dive
Crx 2.2 Deep-DiveCrx 2.2 Deep-Dive
Crx 2.2 Deep-Dive
 
Three WEM Dev Tricks
Three WEM Dev TricksThree WEM Dev Tricks
Three WEM Dev Tricks
 
Web Apps atop a Content Repository
Web Apps atop a Content RepositoryWeb Apps atop a Content Repository
Web Apps atop a Content Repository
 

Kürzlich hochgeladen

SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 

Kürzlich hochgeladen (20)

SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 

AEM Best Practices for Component Development

  • 1. Adobe Experience Manager AEM Developer Meetup Utrecht, September 3rd 2015 @GabrielWalt, Product Manager Development Best Practices
  • 2. Adobe Experience Manager Best Practices… Best practices are useful reference points, but they must come with a warning label : The more you rely on external intelligence, the less you will value an internal idea. And this is the age of the idea. ― Gyan Nagpal
  • 3. Adobe Experience Manager Best Practices… Practices that lead to more efficiency • Less project effort • Less operational effort • Less maintenance effort Automotive assembly line, ca. 1920
  • 4. Adobe Experience Manager Separation of Concerns Java Developer – Java/OSGi – Business logic Front-end Developer – HTML – CSS/JS
  • 5. Adobe Experience Manager Design
 HTML/CSS Component Business
 Logic Inefficient Static HTML being
 handed over… Front-end Developer – HTML – CSS/JS Java Developer – Java/OSGi – Business logic Separation of Concerns
  • 6. Adobe Experience Manager Design
 HTML/CSS Component Business
 Logic Front-end Developer – HTML – CSS/JS Java Developer – Java/OSGi – Business logic Efficient APIs to OSGi bundles Separation of Concerns
  • 7. Adobe Experience Manager §1 – Separating concerns http://docs.adobe.com/content/docs/en/aem/6-1/develop/sightly.html
  • 8. Adobe Experience Manager <a href="${properties.link}" data-sly-test="${properties.jcr:title}">
 ${properties.jcr:title}
 </a> Sightly Template Language • Code-less language, forcing strict separation of concerns • Powerful extension points with the Use-API • Automatic contextual HTML escaping and XSS protection • Automatically removes HTML attributes if value is empty • Reuses HTML blocks for statements • On-par performance and scalability with JSP
  • 9. Adobe Experience Manager Initializes a helper object.
 <div data-sly-use.logic="logic.js">${logic.hi}</div> Output:
 <div>Hello World</div> 
 
 
 
 Use Statement
  • 10. Adobe Experience Manager <!-- template.html -->
 <div data-sly-use.logic="logic.js">${logic.hi}</div>
 /* logic.js */
 use(function () {
 return {
 hi: "Hello World"
 };
 }); Server-side JavaScript logic
  • 11. Adobe Experience Manager <!-- template.html -->
 <div data-sly-use.logic="com.myorg.foo.Logic">${logic.hi}</div> /* Logic.java in OSGi bundle */
 package com.myorg.foo;
 import javax.annotation.PostConstruct;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.models.annotations.Model; @Model(adaptables = Resource.class)
 public class Logic {
 private String hi; @PostConstruct
 protected void init() {
 hi = "Hello World";
 } public String getHi() {
 return hi;
 }
 } Javalogic AdaptablewithSlingModels The Use-API accepts classes that are adaptable from Resource or Request.
  • 12. Adobe Experience Manager Model logic
 This logic is not tied to a template and is potentially reusable among components.
 It should aim to form a stable API that changes little, even in case of a full redesign. ➔ Java located in OSGi bundle View logic
 This logic is specific to the templates and is likely to change if the design changes.
 It is thus a good practice to locate it in the content repository, next to the template. ➔ JavaScript located in component 
 If components are to be maintained by front-end devs (typically with Brackets). ➔ Java located in component
 If performance is critical (e.g. when many requests are not cached by the dispatcher). What kind of Use-API?
  • 13. Adobe Experience Manager Start simple: first, no code! OSGi (Model) Resource API Page API Content Repository Component (View)Content Structure sling: resourceType Resource Template – Sling plays the role of the controller and resolves the sling:resourceType, deciding which component will render the accessed resource. – The component plays the role of the view and it’s Sightly template builds the corresponding markup. – The Resource and Page APIs play the role of the model, which are available from the template as variables.
  • 14. Adobe Experience Manager Add logic only where needed – Model Logic is needed only if the logic to access the data is different to what existing APIs provide. – View Logic is needed only when the template needs additional data preparation. OSGi (Model) Resource API Page API Model Logic Content Repository Component (View)Content Structure sling: resourceType data-sly-use Resource Template View Logic
  • 15. Adobe Experience Manager §2 – Enabling the Java Developer • Getting started
 The AEM Project Archetype • Working efficiently
 The AEM Developer Tools
  • 16. Adobe Experience Manager AEM Project Archetype Adobe Experience Manager
  • 17. Adobe Experience Manager AEM Project Archetype https://github.com/Adobe-Marketing-Cloud/aem-project-archetype Creates a new project with latest best practices prepared • Separate project structure for bundles, apps, content and tests. • Sightly components super-typed in apps with corresponding client-libraries. • OSGi config folder, asset d&d, device emulator, dictionary structure. • Bundle examples for Sling Models, Servlets, Filters and Schedulers. • Unit tests, integration tests, and client-side Hobbes tests with dev mode.
  • 18. Adobe Experience Manager AEM Developer Tools
  • 19. Adobe Experience Manager AEM Developer Tools https://docs.adobe.com/docs/en/dev-tools/aem-eclipse.html Gets new Java developers quickly efficient with AEM • Simple bootstrap of AEM projects via a specific Project Creation Wizard. • Easy synchronization for both content and OSGI bundles. • Seamless integration with AEM instances through Eclipse Server Connector. • Debugging support with code hot-swaping capabiliby. • JCR properties edition.
  • 20. Adobe Experience Manager AEM Developer Tools Sync Revision Control (git, svn, etc.) File System Content Repository Work on file system + transparent sync & content editing sync manual pull Brackets / Eclipse IDE auto push IDE works on
 the File System
  • 21. Adobe Experience Manager §3 – Enabling the Front-End Dev • Efficiently converting designs to web
 Brackets and the Extract extension • Working efficiently on AEM projects
 Brackets and the AEM extension
  • 23. Adobe Experience Manager Brackets https://docs.adobe.com/docs/en/dev-tools/aem-brackets.html Brackets and the Extract extension • Photoshop file support to extract information from a PSD file. • Code hints from the PSD, to easily reuse this extracted information in the code. • CSS preprocessor support, like LESS and SCSS. • And hundreds of additional extensions that cover more specific needs.
  • 24. Adobe Experience Manager Brackets https://docs.adobe.com/docs/en/dev-tools/aem-brackets.html Brackets and the AEM extension • Automated synchronization of changed files to the AEM development instance. • Manual bidirectional synchronization of files and folders. • Full content-package synchronization of the project. • Sightly code completion for expressions and data-sly-* block statements.
  • 25. Adobe Experience Manager Additional words of wisdom • Milage may vary, cultivate critical thinking. • Don’t mix concerns, stick to the language of the file extension. • Resist complexity, over-architecting is just moving the problem. • Keep it simple, it’s just a web server.
  • 26. Adobe Experience Manager Thank you! Developer tools: – Project Archetype
 https://github.com/Adobe-Marketing-Cloud/aem-project-archetype – AEM Eclipse Extension
 https://docs.adobe.com/docs/en/dev-tools/aem-eclipse.html – AEM Brackets Extension
 https://docs.adobe.com/docs/en/dev-tools/aem-brackets.html – Sightly Template Language
 http://www.slideshare.net/GabrielWalt/component-development – Sightly REPL Tool
 https://github.com/Adobe-Marketing-Cloud/aem-sightly-repl – Sightly TodoMVC Example
 https://github.com/Adobe-Marketing-Cloud/aem-sightly-sample-todomvc