Kodningstips
- Ämnen:
- Developing
Skapat för:
- Developer
Använd taglibs eller HTL så mycket som möjligt
Om du inkluderar skript i JSP:er blir det svårt att felsöka problem i koden. Dessutom är det svårt att separera affärslogiken från visningslagret genom att inkludera skriptlets i JSP:er, vilket är ett brott mot principen om ett enda ansvar och designmönstret för MVC.
Skriv läsbar kod
Koden skrivs en gång, men läses många gånger. Om vi lägger lite tid på att städa koden vi skriver kommer vi att betala ut utdelningar längs vägen när vi och andra utvecklare behöver läsa den senare.
Välj namn som ska avslöjas
Helst behöver inte en annan programmerare öppna en modul för att förstå vad den gör. De bör också kunna avgöra vad en metod gör utan att läsa den. Ju bättre vi kan prenumerera på dessa idéer, desto enklare blir det att läsa vår kod och desto snabbare kan vi skriva och ändra vår kod.
I AEM används följande konventioner:
- En enskild implementering av ett gränssnitt namnges
<Interface>Impl
, dvs.ReaderImpl
. - Flera implementeringar av ett gränssnitt namnges
<Variant><Interface>
, dvs.JcrReader
ochFileSystemReader
. - Abstrakta basklasser namnges
Abstract<Interface>
ellerAbstract<Variant><Interface>
. - Paket namnges
com.adobe.product.module
. Varje Maven-artefakt eller OSGi-paket måste ha ett eget paket. - Java-implementeringar placeras i ett impl-paket under deras API.
Observera att dessa konventioner inte nödvändigtvis behöver gälla för kundimplementeringar, men det är viktigt att konventionerna definieras och följs så att koden kan bevaras.
Helst borde namn visa sin avsikt. Ett vanligt kodtest för när namn inte är så tydliga som de ska vara är att det finns kommentarer som förklarar vad variabeln eller metoden är till för:
Otydlig | Rensa |
int d, //förfluten tid i dagar | int elapsedTimeInDays; |
//hämta taggade bilder public List getItems() {} | public List getTaggedImages() {} |
Upprepa inte dig själv
DRY anger att samma uppsättning kod aldrig ska dupliceras. Detta gäller även för exempelvis stränglitteraler. Kodduplicering öppnar dörren för defekter när något måste ändras och bör sökas ut och elimineras.
Undvik nakna CSS-regler
CSS-reglerna ska vara specifika för målelementet i programmets sammanhang. En CSS-regel används till exempel på .content.center skulle vara alltför brett och skulle kunna påverka mycket av innehållet i hela systemet, vilket skulle kräva att andra åsidosätter den här stilen i framtiden. .myapp-centertext skulle vara en mer specifik regel eftersom den anger centrerad text i programmets sammanhang.
Eliminera användning av inaktuella API:er
När ett API är inaktuellt är det alltid bättre att hitta det nya rekommenderade sättet i stället för att förlita sig på det inaktuella API:t. Detta ger smidigare uppgraderingar i framtiden.
Skriv lokaliserbar kod
Alla strängar som inte tillhandahålls av en författare ska kapslas in i ett anrop till AEM i18n-ordlista via I18n.get() i JSP/Java och CQ.I18n.get() i JavaScript. Den här implementeringen returnerar strängen som skickades till den om ingen implementering hittas, vilket ger flexibiliteten att implementera lokalisering efter implementering av funktionerna på det primära språket.
Escape-resurssökvägar för säkerhet
Även om sökvägar i JCR inte får innehålla blanksteg, bör koden inte brytas om de finns. Jackrabbit tillhandahåller en textverktygsklass med escape() och escapePath() metoder. För JSP:er visar Granite-gränssnittet en granite:encodeURIPath() EL funktion.
Använd XSS API och/eller HTML för att skydda mot serveröverskridande skriptattacker (cross-site scripting)
AEM tillhandahåller ett XSS-API för att enkelt rensa parametrar och säkerställa säkerheten vid serveröverskridande skriptattacker (cross-site scripting). Dessutom har HTML dessa skydd inbyggda direkt i mallspråket. Ett API-kalkylblad finns att ladda ned på Utveckling - riktlinjer och bästa praxis.
Implementera lämplig loggning
För Java-kod har AEM stöd för slf4j som standard-API för loggningsmeddelanden och bör användas tillsammans med de konfigurationer som görs tillgängliga via OSGi-konsolen för att ge en konsekvent administration. Slf4j visar fem olika loggningsnivåer. Vi rekommenderar att du använder följande riktlinjer när du väljer vilken nivå du vill logga ett meddelande på:
- FEL: När något har brutits i koden kan bearbetningen inte fortsätta. Detta beror ofta på ett oväntat undantag. Det är vanligtvis praktiskt att ta med stackspår i dessa scenarier.
- VARNING: När något inte har fungerat som det ska, men bearbetningen kan fortsätta. Detta beror ofta på ett undantag som vi förväntade oss, som PathNotFoundException.
- INFORMATION: Information som kan vara användbar vid övervakning av ett system. Tänk på att detta är standardinställningen och att de flesta kunder låter detta vara på plats i sina miljöer. Använd den därför inte för mycket.
- FELSÖKNING: Lägre information om bearbetning. Användbart vid felsökning av supportproblem.
- TRACE: Information på den lägsta nivån, till exempel genom att ange/avsluta metoder. Detta används vanligtvis bara av utvecklare.
JavaScript console.log ska bara användas under utvecklingen och alla loggsatser ska tas bort före lanseringen.
Undvik lasthanteringsprogrammering
Undvik att kopiera kod utan att förstå vad den gör. Om du är osäker är det alltid bäst att fråga någon som har mer erfarenhet av modulen eller API:t som du inte är säker på.
Experience Manager
- Utveckla användarhandboken - översikt
- Introduktion för utvecklare
- Komma igång med utveckling i AEM Sites – WKND-självstudiekurs
- AEM kärnbegrepp
- Struktur för det AEM användargränssnittet med pekskärm
- Koncepten i det AEM användargränssnittet med pekskärm
- AEM - riktlinjer och bästa praxis
- Använda bibliotek på klientsidan
- Developing and Page Diff
- Begränsningar för redigerare
- CSRF Protection Framework
- Datamodellering - David Nueschelers modell
- Bidrar till AEM
- Dokumentskydd
- Referensmaterial
- Skapa en webbplats med alla funktioner (Classic UI)
- Designer och Designer (Classic UI)
- Plattform
- Fusklapp för Sling
- Använda Sling-adaptrar
- Taggbibliotek
- Mallar
- Använda Sling Resource Merger i AEM
- Övertäckningar
- Namnkonventioner
- Skapa en ny GRE-fältkomponent
- Query Builder
- Taggar
- Anpassa sidor som visas av felhanteraren
- Anpassade nodtyper
- Lägga till teckensnitt för grafikåtergivning
- Ansluta till SQL-databaser
- Extern URL
- Skapa och använda jobb för avlastning
- Konfigurerar cookie-användning
- Så här programmässigt kommer du åt AEM JCR
- Integrera tjänster med JMX-konsolen
- Developing the Bulk Editor
- Utveckla rapporter
- eCommerce
- Komponenter
- Kärnkomponenter
- Formatsystem
- Komponenter - översikt
- AEM - Grunderna
- Utveckla AEM
- Utveckla AEM - kodexempel
- JSON-exporterare för innehållstjänster
- Aktivera JSON-export för en komponent
- Bildredigeraren
- Dekoration-tagg
- Använda Dölj villkor
- Konfigurera flera redigerare på plats
- Utvecklarläge
- Testa användargränssnittet
- Komponenter för innehållsfragment
- Hämta sidinformation i JSON-format
- Internationalisering
- Klassiska gränssnittskomponenter
- Headless Experience Management
- Headless och Hybrid with AEM
- Aktivera JSON-export för en komponent
- Enkelsidiga program
- SPA introduktion och genomgång
- SPA WKND - självstudiekurs
- Getting Started with SPA in AEM - React
- Komma igång med SPA i AEM - Angular
- Implementera en React Component for SPA
- SPA djupdykning
- SPA
- Utveckla SPA för AEM
- SPA Blueprint
- SPA
- Dynamisk mappning av modell till komponent för SPA
- SPA
- SPA och Adobe Experience Platform Launch Integration
- SPA- och serveråtergivning
- SPA referensmaterial
- HTTP-API
- Innehållsfragment
- Experience Fragments
- Utvecklingsverktyg
- Utvecklingsverktyg
- AEM Modernization Tools
- Dialogruteredigeraren
- Verktyget Dialogkonvertering
- Utveckla med CRXDE Lite
- Hantera paket med Maven
- Utveckla AEM projekt med Eclipse
- Skapa AEM projekt med Apache Maven
- Utveckla AEM projekt med IntelliJ IDEA
- Så här använder du VLT-verktyget
- Så här använder du proxyserververktyget
- AEM Brackets Extension
- AEM Developer Tools for Eclipse
- AEM
- Personanpassning
- Utöka AEM
- Anpassa sidredigering
- Anpassa konsolerna
- Anpassa vyer av Sidegenskaper
- Konfigurera din sida för gruppredigering av sidegenskaper
- Anpassa och utöka Content Fragments
- Utöka arbetsflöden
- Utöka Multi Site Manager
- Spårning och analys
- Cloud Services
- Skapa anpassade tillägg
- Forms
- Integrera tjänster med JMX-konsolen
- Developing the Bulk Editor
- Utöka Classic UI
- Testning
- Bästa praxis
- Mobil webb