Il Modello di David è stato scritto da David Nuescheler anni fa, ma le idee sono vere oggi. I principi principali del modello di David sono i seguenti:
clone()
, merge()
e update()
.Il modello di David si trova sul wiki Jackrabbit all’indirizzo https://wiki.apache.org/jackrabbit/DavidsModel.
Tutto deve essere memorizzato nell’archivio anziché basarsi su fonti di dati di terze parti separate, come i database. Questo vale per il contenuto creato, i dati binari come immagini, codice, configurazioni, ecc. Questo ci consente di utilizzare un set di API per gestire tutti i contenuti e la promozione di tali contenuti tramite la replica. Inoltre, otteniamo un'unica fonte di backup, registrazione, ecc.
Quando si crea una nuova funzione, inizia sempre progettando prima la struttura del contenuto JCR, quindi cerca di leggere e scrivere il contenuto utilizzando i servlet Sling predefiniti. Questo ti consentirà di garantire che l’implementazione funzioni bene con i meccanismi di controllo degli accessi preconfigurati e di evitare la generazione di servlet non necessari in stile CRUD.
I servlet devono essere definiti in base a resourceTypes anziché ai percorsi. Questo consente di utilizzare i controlli di accesso JCR, aderire ai principi REST e utilizzare il risolutore di risorse e risorse che ci vengono forniti nella richiesta. Questo ci consente anche di modificare gli script che eseguono il rendering degli URL sul lato server senza dover modificare alcun URL dal lato client, nascondendo al contempo i dettagli dell’implementazione lato server dal client per una maggiore sicurezza.
I tipi di nodo funzionano a un livello basso nel livello dell'infrastruttura e la maggior parte dei requisiti può essere soddisfatta utilizzando un tipo di nodo sling:resourceType assegnato a un tipo di nodo nt:unstructured, oak:Unstructured, sling:Folder o cq:Page. I tipi di nodo equivalgono allo schema nel repository e la modifica dei tipi di nodo può essere molto costoso lungo il percorso.
Il rispetto delle convenzioni di denominazione aggiunge coerenza alla base di codice, riducendo il tasso di incidenza dei difetti e aumentando la velocità degli sviluppatori che lavorano nel sistema. Le seguenti convenzioni sono utilizzate per Adobe nello sviluppo di AEM:
Nomi di nodo
Nomi di proprietà
Componenti (JSP/HTML)