Codetips coding-tips
Taglibs of HTML zoveel mogelijk gebruiken use-taglibs-or-htl-as-much-as-possible
Het opnemen van scriptlets in JSPs maakt het moeilijk om kwesties in de code te zuiveren. Bovendien, door scriptlets in JSPs op te nemen, is het moeilijk om bedrijfslogica van de meningslaag te scheiden, die een schending van het Enige Verantwoordelijkheidsbeginsel en het ontwerppatroon MVC vormt.
Leesbare code schrijven write-readable-code
Code wordt één keer geschreven, maar vaak gelezen. Als we enige tijd op voorhand besteden aan het opschonen van de code die we schrijven, zullen we dividend uitbetalen over de weg, terwijl we en andere ontwikkelaars het later moeten lezen.
Namen kiezen die bedoeld zijn om te onthullen choose-intention-revealing-names
Idealiter hoeft een andere programmeur geen module te openen om te begrijpen wat deze doet. Ze moeten ook kunnen zien wat een methode doet zonder deze te lezen. Hoe beter we ons kunnen abonneren op deze ideeën, hoe gemakkelijker het is om onze code te lezen en hoe sneller we onze code kunnen schrijven en wijzigen.
In de basis van de AEM code worden de volgende conventies gebruikt:
- Één enkele implementatie van een interface wordt genoemd
<Interface>Impl
, d.w.z.ReaderImpl
. - De veelvoudige implementaties van een interface worden genoemd
<Variant><Interface>
, d.w.z.JcrReader
enFileSystemReader
. - Abstracte basisklassen krijgen een naam
Abstract<Interface>
ofAbstract<Variant><Interface>
. - Pakketten krijgen een naam
com.adobe.product.module
. Elke Maven-artefact- of OSGi-bundel moet een eigen pakket hebben. - Java-implementaties worden in een impl-pakket onder de bijbehorende API geplaatst.
Deze conventies hoeven niet noodzakelijkerwijs van toepassing te zijn op de implementaties van de klant, maar het is belangrijk dat conventies worden gedefinieerd en nageleefd, zodat de code behouden kan blijven.
In het ideale geval zouden namen hun intentie moeten onthullen. Een gemeenschappelijke codetest voor wanneer de namen niet zo duidelijk zijn aangezien zij zouden moeten zijn de aanwezigheid van commentaren die verklaren wat de variabele of de methode voor zijn:
Niet herhalen don-t-repeat-yourself
DRY geeft aan dat dezelfde codeset nooit mag worden gedupliceerd. Dit geldt ook voor zaken als letterlijke tekenreeksen. Codeduplicatie opent de deur voor defecten wanneer iets moet veranderen en moet worden gezocht en geëlimineerd.
Naakte CSS-regels vermijden avoid-naked-css-rules
CSS-regels moeten specifiek zijn voor uw doelelement in de context van uw toepassing. Bijvoorbeeld een CSS-regel die wordt toegepast op .content.center Deze stijl zou te breed zijn en zou mogelijk veel inhoud in uw systeem beïnvloeden, waardoor anderen deze stijl in de toekomst moeten overschrijven. .mijnapp-centertext zou een specifiekere regel zijn aangezien het gecentreerd specificeert text in de context van uw toepassing.
Gebruik van verouderde API's elimineren eliminate-usage-of-deprecated-apis
Wanneer een API wordt afgekeurd, is het altijd beter om de nieuwe geadviseerde benadering te vinden in plaats van het vertrouwen op afgekeurde API. Hierdoor zijn upgrades in de toekomst vloeiender.
Lokaliseerbare code schrijven write-localizable-code
Tekenreeksen die niet door een auteur worden geleverd, moeten via I18n.get() in JSP/Java en CQ.I18n.get() in JavaScript. Deze implementatie retourneert de tekenreeks die eraan is doorgegeven als er geen implementatie wordt gevonden. Dit biedt dus de flexibiliteit om lokalisatie te implementeren nadat de functies in de primaire taal zijn geïmplementeerd.
Escape-hulpbronnenpaden voor veiligheid escape-resource-paths-for-safety
Paden in het JCR mogen geen spaties bevatten, maar de aanwezigheid ervan mag er niet toe leiden dat code wordt afgebroken. Jackrabbit biedt een hulpprogrammaklasse Text met escape() en escapePath() methoden. Voor JSPs, stelt granite UI a graniet:encodeURIPath() EL functie.
Gebruik de XSS API en/of HTML om tegen cross-site scripting aanvallen te beschermen use-the-xss-api-and-or-htl-to-protect-against-cross-site-scripting-attacks
AEM verstrekt een XSS API om parameters gemakkelijk schoon te maken en veiligheid van dwars-plaats scripting aanvallen te verzekeren. Bovendien heeft HTL deze beschermingen direct in de sjabloontaal ingebouwd. Er is een API-ontwerpblad beschikbaar dat kan worden gedownload op Ontwikkeling - Richtsnoeren en beste praktijken.
Pas het aangewezen registreren toe implement-appropriate-logging
Voor code Java, AEM steunt slf4j als standaard API voor het registreren van berichten en zou samen met de configuraties moeten worden gebruikt die door de console OSGi voor consistentie in beleid ter beschikking worden gesteld. Slf4j stelt vijf verschillende registrerenniveaus bloot. Wij adviseren gebruikend de volgende richtlijnen wanneer het kiezen welk niveau om een bericht bij te registreren:
- FOUT: Wanneer er iets in de code is verbroken en de verwerking niet kan worden voortgezet. Dit gebeurt vaak als gevolg van een onverwachte uitzondering. Het is meestal handig om stacksporen in deze scenario's op te nemen.
- WAARSCHUWING: Als iets niet goed heeft gewerkt, maar de verwerking kan doorgaan. Dit zal vaak het resultaat zijn van een uitzondering die we verwachtten, zoals een PathNotFoundException.
- INFO: Informatie die nuttig zou zijn wanneer het controleren van een systeem. Onthoud dat dit de standaardinstelling is en dat de meeste klanten dit op hun plaats zullen laten in hun omgeving. Gebruik het daarom niet te veel.
- FOUTOPSPORING: Informatie op een lager niveau over verwerking. Nuttig wanneer het zuiveren van een kwestie met steun.
- TRACE: Het laagste niveau van informatie, dingen zoals het ingaan van/het verlaten van methodes. Dit zal gewoonlijk slechts door ontwikkelaars worden gebruikt.
In het geval van JavaScript: console.log dienen alleen tijdens de ontwikkeling te worden gebruikt en alle loginstructies dienen vóór de release te worden verwijderd.
Ladingencatalogus vermijden avoid-cargo-cult-programming
Vermijd het kopiëren van code zonder te begrijpen wat het doet. In geval van twijfel is het altijd beter om iemand te vragen die meer ervaring heeft met de module of API waarop u niet duidelijk bent.